Mysql
使用 where 刪除對同一個表的多個連接
我被困在以下情況。需要專家建議。我有 3 個表,login_details、deleted_login_details 和 custom_fields,如下所示。login_details 結構 = deleted_login_details 自定義欄位有:user_id、custom_name、custom_value
我想要以下結果。我只想要那些在 custom_fields 表上通過多個連接滿足所有 where 條件的使用者。例子
select user_id from login_details union deleted-login_details as login_table join custom_fields as f1 on f1.user_id = login_table.user_id join custom_fields as f2 on f2.user_id = login_table.user_id where f1.custom_name = '1' and f1.custom_value in (1,2,3) and f2.custom_name = '2' and f2.custom_value in (4,5,6)
因此,只有那些具有 custom_name =1 和上述值以及 custom_name=2 和上述值的記錄才應該出現。但我希望這僅使用 1 個連接到 custom_fields 表。
就像
所以只有 1 ,2 應該得到,沒有 3 因為 3 沒有 custom_name =1 記錄
有什麼建議嗎?提前致謝。
附加到您的查詢
GROUP BY user_id
。這具有多個 user_id 成為一個行條目的效果。另外附加
HAVING COUNT(user_id)=2
. 正如您GROUP BY user_id
對它們的計數表示欄位匹配的數量。
(我不明白你對 的使用
UNION
;我將專注於這個問題。)FROM `deleted-login_details` AS login JOIN custom_fields AS cf ON cf.user_id = login.user_id WHERE IF(name = '1', value IN (1,2,3), value IN (4,5,6))
如果您需要 2 個以上的選擇,請考慮
CASE .. WHEN .. END
語法。