SQL-Find数据显示在一个表中,而不是另一个BUT数据显示在多个列中

时间:2016-08-24 15:49:14

标签: sql sqlite

字面意思是我的问题。如何查询出现在一个表而不是另一个表中的数据,但该数据可以存在于2个或更多列中?

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

create table Likes(ID1 int, ID2 int);

在理论社交网络中,您将获得两个表,一个名为highschooler,一个名为     喜欢。在喜欢中,id1喜欢id2,但它不是     必然是相互的。

问题:查找未出现在“喜欢”表格中的所有学生(如     喜欢或喜欢的学生,并返回他们的名字和成绩。

我尝试过左连接,不是,不存在,是空的,我没有得到它。我觉得这个有一些联接,但我对SQL没有太多的经验。

使用SQlite所以我不能在子查询中使用select *。也试过了。

2 个答案:

答案 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语句与和/或分开。我以为它们总是必须嵌套。显然你可以。我是新人。