我有 4 张 table :
ADS
:id、文本、数字
TABLE2
:id、user_id、数字
TABLE3
:id、user_id、数字
TABLE4
:id、user_id、数字
user_id 不是唯一的。可以存在也可以不存在。
我想要的输出:
如果ADS
表的数量等于TABLE1
的数量 OR TABLE2
OR TABLE3
,仅显示文本。
我已经尝试过:
SELECT ADS.text FROM ADS
LEFT JOIN TABLE2 ON TABLE2.user_id = ?
LEFT JOIN TABLE3 ON TABLE3.user_id = ?
LEFT JOIN TABLE4 ON TABLE4.user_id = ?
WHERE ADS.number = TABLE2.number OR
ADS.number = TABLE3.number OR
ADS.number = TABLE4.number
GROUP BY ADS.id
和
SELECT * FROM
(
SELECT
ADS.text FROM ADS
LEFT JOIN TABLE2 ON TABLE2.user_id = ?
LEFT JOIN TABLE3 ON TABLE3.user_id = ?
LEFT JOIN TABLE4 ON TABLE4.user_id = ?
WHERE ADS.number = TABLE2.number OR
ADS.number = TABLE3.number OR
ADS.number = TABLE4.number
UNION ALL
SELECT
ADS.text FROM ADS
LEFT JOIN TABLE2 ON TABLE2.user_id = ?
LEFT JOIN TABLE3 ON TABLE3.user_id = ?
LEFT JOIN TABLE4 ON TABLE4.user_id = ?
WHERE ADS.number = TABLE2.number OR
ADS.number = TABLE3.number OR
ADS.number = TABLE4.number
) request
ORDER BY ADS.id
$reponse->execute(array($_SESSION['id'],$_SESSION['id'],$_SESSION['id']));
我总是输出太多或不足......
最佳答案
这符合你的要求吗?
SELECT ADS.text
FROM ADS a
WHERE EXISTS (SELECT 1 FROM TABLE2 t WHERE t.user_id = ? AND t.number = a.number) OR
EXISTS (SELECT 1 FROM TABLE3 t WHERE t.user_id = ? AND t.number = a.number) OR
EXISTS (SELECT 1 FROM TABLE4 t WHERE t.user_id = ? AND t.number = a.number);
关于Mysql 一张表与多张表进行JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565120/