我有一個困境。從多個表中選擇數據,其中特定表不包含任何可識別的列?
假設(爲簡單起見)我有四個表,不同數量的行和列,它們分別是:用戶,郵件,事件和服務。
當我收到一個請求時,我有一個ID鏈接到其中的三個表上,但有不同的列匹配。 比方說,用戶上USER_ID比賽,郵件上比賽user_ref和上user_ref以及匹配事件。
對於我來說,這將是一個很好的查詢,即使是單個,多個或甚至所有的ID。 問題出現在我必須採取的下一步,這就是*服務表。
服務表不符合其他標準的相同標準,因此它沒有可以拉出的user_id或user_ref。 它具有的是* mail_ref *列,它可能包含重複項。 我當前的方法試圖使用IN()方法,但它只適用於選擇單個用戶/行。
這裏是我當前的查詢:
SELECT
u.Name as Name,
COUNT(m.user_ref) AS Mail_total,
e.mail_id,
COUNT(e.user_ref) AS Event_total,
COUNT(s.mail_ref) AS service_total
FROM
users u
LEFT JOIN
mail m ON m.user_ref = u.user_id
LEFT JOIN
service s ON s.mail_ref IN(e.mail_id)
LEFT JOIN
events e ON e.user_ref = u.user_id
WHERE u.user_id IN(my,list,of,ids)
GROUP BY s.mail_ref
我現在有它的問題是,雖然它是選擇正確的數據,它不是爲我指定每個ID選擇唯一的數據。 給定一個id時,它的工作很好,但如上所述,而不是當它需要檢索多行時。
如果有人可以幫助我,它將不勝感激。
使它成爲'SELECT DISTINCT'來選擇唯一的行並過濾掉雙打,儘管我認爲這個查詢根本不起作用,是嗎? – GolezTrol 2012-03-24 07:28:50
它確實有效,只是不像預期的那樣。它爲所選的所有列返回相同的「COUNT」。 – nand 2012-03-24 13:21:06