Zählen von Datensätzen aus der Tabelle, die angezeigt wird, man aber nicht andere: MYSQL
Ich habe ein zwei einfache Tabellen
Benutzer
+----+--------+-----------+
| id | gender | birthdate |
+----+--------+-----------+
userpreference
+----+------------------+-----------------+
| id | preference value | preference type |
+----+------------------+-----------------+
Frage:
Ich Abfragen möchten alle Menschen, die noch nicht aufgelistet sind, bestimmte Präferenz-Wert wie 'Einkaufen'.Dies umfasst alle Menschen, die noch nicht aufgeführt Präferenz-Typen, so dass Spalte kann null sein, aber da userpreference die Spalte 'id' Referenzen-Nutzer als Fremdschlüssel, möchte ich auch meine, zählen alle Menschen, die nicht zeigen, bis in der zweiten Tabelle (user Präferenz)?
Gesamtanzahl der Menschen, die keinen Wert bevorzugt "shoppen", wie Ihre Vorliebe Wert:
Hier ist was ich versucht habe:
SELECT
(
SELECT COUNT(DISTINCT userpreference.id) FROM userpreference
WHERE preferencevalue != 'shopping')
+
(
SELECT COUNT(users.id)
FROM users
WHERE users.id NOT IN
(SELECT userpreference.Id
FROM userpreference )
)
AS'Total'
InformationsquelleAutor Warz | 2011-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine korrelierte Unterabfrage, in denen die innere Abfrage verweist, etwas in der äußeren Abfrage. Ein Exists-Ausdruck funktioniert durch Rückgabe von true, wenn noch eine Zeile in der Unterabfrage zurückgegeben wird für jeden Benutzer. Der einzige Weg, der Exists-Unterabfrage würde die Zeile zurück, wenn der angegebene Benutzer hat mindestens eine Präferenz und einer von diesen bevorzugten Zeilen ist "shopping". Durch die Verwendung Nicht Vorhanden ist, bin ich sagen, entweder gibt es keine Präferenz Zeilen für den Benutzer oder keine Zeilen für "shopping".
InformationsquelleAutor Thomas
Versuchen, ein RIGHT JOIN, umfassen, alle Menschen, die nicht zeigen, bis in der zweiten Tabelle
SELECT *
VON
Users
RIGHT JOIN Userpreference ( Benutzer.
userID
= Benutzer.userID
)WO preference_value = 'Einkaufen'
InformationsquelleAutor Traveling_Monk
Versuchen Sie dies:
SELECT COUNT(DISTINT U. id) FROM Benutzer U NATURAL LEFT JOIN userpreference BIS
WO BIS.preferencevalue NULL IST ODER BIS.preferenceValue != 'Einkaufen';
Den LEFT JOIN bringen soll, in der alle Benutzer erfasst, ob oder nicht Sie haben eine Aufnahme.
Hier ist das Dokument, das ich war, stützend, auf: Der LINKE Schlüsselwort JOIN gibt alle Zeilen aus der linken Tabelle (table_name1), auch wenn es keine übereinstimmung in der rechten Tabelle (table_name2).
InformationsquelleAutor David Winant