我正在尝试使用两个表之间的LEFT OUTER JOIN来获取SQL查询以返回NULL值。
一个表包含用户信息,另一个表包含点名信息。基本上,我正在尝试生成一个HTML表来显示是否有人为每个月签署了点名。如果该值为NULL,则表示它们在该点名时不是成员。
我现在遇到的问题是查询只返回一个NULL值,即使它们不是多个滚动调用的成员。这是我正在使用的查询,其中用户不是多个点名调用的成员:
SELECT m.userid, r.status, r.rollcallid
FROM fleetmgr_members AS m
LEFT OUTER JOIN fleetmgr_rollcall_log AS r
ON m.userid = r.userid AND r.rollcallid IN(1, 5)
WHERE m.userid = 2089
ORDER BY m.currentName, r.rollcallid;
此查询返回:
userid status rollcallid
2089 NULL NULL
我希望它返回:
userid status rollcallid
2089 NULL 1
2089 NULL 5
出于某种奇怪的原因,实现我想要它返回的东西已经让我感到非常难过 - 所以提前感谢您提供的任何帮助。
fleetmgr_rollcall_log表:
id rollcallid userid date_signed status activity comments
2 1 652 1330563886 signed 6-8 hrs/week -
29 1 2462 1330565521 signed 9-11 hrs/week -
1823 5 731 1333300321 signed 0-2 hrs/week -
2293 5 166 1333901983 exempt 0-2 hrs/week -
fleetmgr_members表:
id userid currentName
1 3 SomeUsername
2 5 DifferentUsername
答案 0 :(得分:1)
这样的事情
SELECT r1.rollcallid, r2.status
FROM (
SELECT DISTINCT rollcallid
FROM fleetmgr_rollcall_log
) AS r1
LEFT JOIN fleetmgr_rollcall_log AS r2
ON r1.rollcallid=r2.rollcallid AND r2.userid=2089
ORDER BY r1.rollcallid;
我没有返回任何用户数据,因为您在示例结果中获得的唯一用户数据是您在查询中已经知道的user_id。
答案 1 :(得分:0)
试试这个
SELECT m.userid, r.status, r.rollcallid
FROM fleetmgr_members m, fleetmgr_rollcall_log r
WHERE m.userid = 2089 AND r.rollcallid IN(1, 5)
ORDER BY m.currentName, r.rollcallid;
那么这个(使用CROSS JOIN):
SELECT m.userid, r.status, r.rollcallid
FROM fleetmgr_members m cross join fleetmgr_rollcall_log r
WHERE m.userid = 2089 AND r.rollcallid IN(1, 5)
ORDER BY m.currentName, r.rollcallid;
答案 2 :(得分:0)
将r.rollcallid IN(1,5)移动到where子句,而不是join子句。
答案 3 :(得分:0)
为什么这不起作用?
SELECT m.userid, r.status, r.rollcallid
FROM fleetmgr_members AS m
LEFT OUTER JOIN fleetmgr_rollcall_log AS r
ON m.userid = r.userid
WHERE m.userid = 2089 AND r.rollcallid IN(1, 5)
ORDER BY m.currentName, r.rollcallid;