SQLite:当key = null

时间:2015-05-10 07:10:54

标签: sqlite

我有以下表格

R: 
rid, wid, sid, attend
1    1    3     1
2    1    2     0
3    2    3     1
4    3    1     0
5    2    1     1
6    4    1     1

E: 
eid, wid,sid
1    1    3
2    2    1

W:
wid, title
1    title1
2    title2
3    title3
4    title4

我想要检索w的标题,其中wid在R中但不在E中。当然,我将使用LEFT OUTER JOIN。我写了以下查询

SELECT  DISTINCT  w.title
FROM E LEFT OUTER JOIN  R 
ON R.sid = E.sid  AND R.wid = E.wid  
JOIN W
ON R.wid = W.wid
WHERE R.sid = 1  AND R.attend = 1

这将返回表R和E中存在的wid标题:title2 and title3。但是,我想要检索R中存在的wid的标题,而不是E i.e: title4中的标题。因此,当我LEFT OUTER JOIN R with E时,在R中没有匹配值的E列将填充NULL值 - 据我所知 - 。但是,当我使用子句WHERE E.sid = NULLON E.sid = NULL时,查询不会检索任何内容。我试图用简单的查询从表中检索 SELECT * FROM E where sid = NULL但它不会检索任何东西,虽然我添加了一行sid = null只是为了测试。 所以,也许SQLite支持空值存在问题,或者它可能只是我查询中的内容。

我一直在寻找一个星期。我希望我能像往常一样在这里找到一些帮助。

1 个答案:

答案 0 :(得分:1)

@AFract提供的第一个链接帮助了我。我有两个问题。

  1. 我把表 E放在LEFT OUTER JOIN的左侧手侧,而表 R放在右侧,这没有给出正确的输出。我不得不改变立场
  2. 显然语法E.sid = NULL对SQLite不起作用,尽管它是在官方网站上的文档中编写的。 正确的语法对我有用E.sid IS NULL
  3. 所以我将查询修改为以下

    SELECT  DISTINCT W.title
    FROM R  LEFT OUTER JOIN E
    ON R.sid = E.sid  AND R.wid = E.wid  JOIN W ON R.wid = W.wid
    WHERE R.sid = 1 AND E.sid IS NULL AND R.attend = 1