2012-04-13 42 views
1

我試圖讓我的兩個表之間使用LEFT OUTER JOIN返回NULL值的SQL查詢。使用外部連接返回多個空值

一個表格包含用戶信息,另一個表格包含唱名信息。基本上,我試圖生成一個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

你有沒有列出所有rollcalls的表? – ESG 2012-04-14 04:51:45

回答

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。

+0

我只是返回用戶ID作爲測試您的似乎工作正常它由於某種原因返回了一個rollcallid爲0的行,但我只是添加了WHERE r1.rollcallid!= 0來擺脫那一行 非常感謝! – Sharpk1ll3r 2012-04-14 14:57:26

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; 
+0

那一個返回所有1,253行,並用2089代替實際用戶標識。 – Sharpk1ll3r 2012-04-14 01:12:50

0

將r.rollcallid IN(1,5)移至where子句,而不是join子句。

+0

我確實嘗試過,它只是返回一個空集。 :( – Sharpk1ll3r 2012-04-14 01:10:16

+0

看起來像fleetmgr_members是一個紅色鯡魚和一點加入考慮:SELECT * FROM fleetmgr_rollcall_log WHERE userid = 2089 AND狀態爲空AND rollcallid IN(1,5); – scorpdaddy 2012-04-14 02:22:03

+0

另一個空集。:/ – Sharpk1ll3r 2012-04-14 03:04:51

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;