Mysql

使用 where 刪除對同一個表的多個連接

  • November 20, 2018

我被困在以下情況。需要專家建議。我有 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語法。

引用自:https://dba.stackexchange.com/questions/222849