1

2つのテーブル間でLEFTOUTERJOINを使用して、NULL値を返すSQLクエリを取得しようとしています。

1つのテーブルにはユーザー情報が含まれ、もう1つのテーブルにはロールコール情報が含まれます。基本的に、私は誰かが毎月ロールコールに署名したかどうかを表示するHTMLテーブルを生成しようとしています。値がNULLの場合は、そのロール呼び出しの時点でメンバーではなかったことを意味します。

私が今抱えている問題は、それらが複数のロール呼び出しのメンバーでなかったとしても、クエリが1つの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

これを試して

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 に答える
0

r.rollcallid IN(1、5)をjoin句ではなくwhere句に移動します。

于 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 に答える