我有以下表格
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 = NULL
或ON E.sid = NULL
时,查询不会检索任何内容。我试图用简单的查询从表中检索
SELECT * FROM E where sid = NULL
但它不会检索任何东西,虽然我添加了一行sid = null只是为了测试。
所以,也许SQLite支持空值存在问题,或者它可能只是我查询中的内容。
我一直在寻找一个星期。我希望我能像往常一样在这里找到一些帮助。
答案 0 :(得分:1)
@AFract提供的第一个链接帮助了我。我有两个问题。
E.sid = NULL
对SQLite不起作用,尽管它是在官方网站上的文档中编写的。 正确的语法对我有用E.sid IS NULL
所以我将查询修改为以下
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