2016-08-24 2 views
0

Wörtlich ist das meine Frage. Wie würde man Daten abfragen, die in einer Tabelle erscheinen und nicht in einer anderen, aber dass Daten in zwei oder mehr Spalten existieren können?SQL-Find Daten, die in einer Tabelle und nicht anderen, aber Daten in mehr als einer Spalte erscheint

create table Highschooler(ID int, name text, grade int); 

create table Likes(ID1 int, ID2 int); 

In einem theoretischen sozialen Netzwerken Sie zwei Tabellen angegeben sind, eine mit dem Namen highschooler, eine namens mag. In likes, id1 mag id2, aber es ist nicht notwendigerweise gegenseitig.

Frage: Finden Sie alle Schüler, die nicht in der Likes-Tabelle (als ein Schüler, der mag oder ist gefallen) erscheinen und ihre Namen und Noten zurückgeben.

Ich habe versucht links Joins, nicht in, nicht existiert, ist null und bekomme es nicht. Ich habe das Gefühl, dass es ein paar Joins in diesem gibt, aber ich bin nicht sehr erfahren mit SQL.

Mit SQlite kann ich Select * in einer Unterabfrage nicht verwenden. Versuchte das auch.

+0

Wählen Sie einen SQL-Typ nicht mysql oder sqlite – Drew

+0

Wenn Sie uns einige Beispieldaten geben, können wir es tun – kbball

+0

Datensätze sind nicht in Spalten vorhanden, so dass Ihre Frage keinen Sinn ergibt für eine relationale Datenbanken. –

Antwort

0

Ich würde das Anti-Join-Muster verwenden.

SELECT h.* 
    FROM highschooler h 
    LEFT 
    JOIN Likes lo 
     ON lo.id1 = h.id 
    LEFT 
    JOIN Likes lt 
     ON lt.id2 = h.id 
    WHERE lo.id1 IS NULL 
    AND lt.id2 IS NULL 

Das würde auf MySQL funktionieren. Ich bin mir nicht sicher über Einschränkungen in SQLITE.

Das sagt im Grunde ... Holen Sie mir alle Reihen von Highschooler, zusammen mit passenden Zeilen von Likes. Alle Zeilen im Hochschüler, die keine übereinstimmende Zeile in Likes enthalten, werden mit NULL-Werten als Platzhalter für die Spalten aus der Likes-Tabelle zurückgegeben. Der "Trick" ist das Prädikat in der WHERE-Klausel, das alle Zeilen ausschließt, in denen eine Übereinstimmung gefunden wurde.

+0

Ich änderte die Select-Anweisung zu wählen Sie Name, Grad aber ja, das war in SQLite korrekt. Vielen Dank! –

0

fanden auch diese gearbeitet:

SELECT name, grade 
FROM Highschooler 
WHERE ID NOT IN (SELECT ID1 FROM Likes) AND ID NOT IN (SELECT ID2 FROM Likes) 

Ich wusste nicht, dass Sie mit und/oder select-Anweisungen in der where-Klausel trennen könnte. Ich dachte, sie müssten immer verschachtelt werden. Offensichtlich kannst du es. Ich bin neu.

Verwandte Themen