字面意思是我的问题。如何查询出现在一个表而不是另一个表中的数据,但该数据可以存在于2个或更多列中?
create table Highschooler(ID int, name text, grade int);
create table Likes(ID1 int, ID2 int);
在理论社交网络中,您将获得两个表,一个名为highschooler,一个名为 喜欢。在喜欢中,id1喜欢id2,但它不是 必然是相互的。
问题:查找未出现在“喜欢”表格中的所有学生(如 喜欢或喜欢的学生,并返回他们的名字和成绩。
我尝试过左连接,不是,不存在,是空的,我没有得到它。我觉得这个有一些联接,但我对SQL没有太多的经验。
使用SQlite所以我不能在子查询中使用select *。也试过了。
答案 0 :(得分:0)
我使用了反连接模式。
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
这适用于MySQL。我不确定sqllite的限制。
基本上说......从高中学生那里获取所有行,以及来自喜欢的匹配行。高回原单元件中没有匹配的Likes行中的任何行都将被返回,其中NULL值作为Likes表中列的占位符。 "技巧"是WHERE子句中的谓词,它排除了找到匹配项的任何行。
答案 1 :(得分:0)
还发现这有效:
SELECT name, grade
FROM Highschooler
WHERE ID NOT IN (SELECT ID1 FROM Likes) AND ID NOT IN (SELECT ID2 FROM Likes)
我不知道您可以将where子句中的select语句与和/或分开。我以为它们总是必须嵌套。显然你可以。我是新人。