Mysql 一张表与多张表进行JOIN

标签 mysql

我有 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/

相关文章:

mysql - 从表中删除重复记录

mysql - mysqldump函数导入mysql数据库的正确方法是什么?

mysql - MySQL Workbench 向 mysqldump 传递哪些参数?

php - 优化我的循环以返回而不是执行 10 次查询

mysql - 已建立连接时插入数据库的问题

mysql - 选择一些但计算所有 MySQL

php - 在框中显示最近的项目

php - 查询自上次检查以来条目是否已更改并连续检查一段时间

php - 在 CodeIgniter 中得到一个带有子字符串的字符串

PHP OOP 插入数据