1

我正在尝试使用我的两个表之间的 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
4

4 回答 4

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。

于 2012-04-14T09:42:42.343 回答
0

将 r.rollcallid IN(1, 5) 移动到 where 子句,而不是 join 子句。

于 2012-04-13T23:59:15.550 回答
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;
于 2012-04-14T10:43:27.613 回答
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;
于 2012-04-13T23:39:20.297 回答