在 MySQL 中使用子查询和联合连接 2 个表

问题描述 投票:0回答:1

我有表1和表2,其中表1是主表,表2是子表。两个表的关系已通过表 1(id) 的主键与表 2 中的 table_1_id 列实现。

我需要通过在单个查询中检查表中具有以下条件的数据来从表1中获取数据:

如果子表2中不存在表1数据

  • 从表1中获取数据

如果表1数据存在于表2中且表2中status=0,

  • 从表1中获取数据

如果表1数据存在于表2中且表2中status=1,

  • 忽略表1中的数据

下面是我的 SQL,但它总是返回相同数量的记录,并且不考虑第二个和第三个条件:

select t1.* from table_1 as t1
where t1.id IN(
SELECT t1.id
            from table_1 as t1
            LEFT JOIN table_2 AS t2 ON t2.table_1_id=t1.id
            UNION ALL
            SELECT table_1_id
            from table_2 as t2 where t2.deleted = "0"'
)

我在上面的查询中尝试在 where 子句中使用 EXIST 而不是 t1.id IN 但没有成功,有人可以指导我这个查询中有什么问题以及如何纠正我的查询以获取表中的记录吗?

谢谢你。

sql mysql mysqli left-join union
1个回答
0
投票

我认为一个简单的(反)

JOIN
应该可以满足你的需要:

SELECT t1.*
FROM table_1 AS t1
LEFT JOIN table_2 AS t2 ON 
    t1.id = t2.table_1_id
    AND t2.status = 1
WHERE t2.table_1_id IS NULL
© www.soinside.com 2019 - 2024. All rights reserved.