gpt4 book ai didi

mysql - 验证 INNER JOIN 中的所有行都具有值

转载 作者:行者123 更新时间:2023-11-29 22:23:58 26 4
gpt4 key购买 nike

我在 table1.idtable2.parent_id 之间有一对多表关系,并且想要选择基于 table1.idtable2.status上。

SELECT table1.id FROM table1
INNER JOIN table2 ON table2.parent_id = table1.id
WHERE table2.status = 1

如果table2中只有一个关系,这几乎可以满足我的要求。但如果 table2 中有更多行,一个结果可能具有 status=1,但另一个结果具有 status=2

我想要的是获取table1.id的结果仅当table2中的所有结果为status=1 .

示例;

table1
id=1, name=row1
id=2, name=row2

table2
id=1, parent_id=1, status=1
id=2, parent_id=1, status=2
id=3, parent_id=2, status=1
id=4, parent_id=2, status=1

在上面的示例中,table1.id = 1 有 2 个具有不同状态的关系,我不需要这一行。 table1.id = 2 但是,有 2 个关系具有相同的 status=1,我想要这个结果。

最佳答案

您可以使用EXISTSNOT EXISTS检查另一个表中的值。

此查询从 Table1 中选择在 Table2 中具有匹配记录的所有行,但这些行的状态均不为 1。

SELECT *
FROM Table1 t1
WHERE -- Check for matching records in Table2.
EXISTS
(SELECT 'x' FROM Table2 t2
WHERE t2.parent_id = t1.id)
-- Skip rows that have a status different than 1.
AND NOT EXISTS
(SELECT 'x' FROM Table2 t2
WHERE t2.parent_id = t1.id
AND t2.status <> 1)

如果表 2 中根本没有状态,我不确定您想要什么。如果要从 Table1 返回在 Table2 中没有任何匹配行的行,则可以省略第一个 EXIST <subselect>部分。

关于mysql - 验证 INNER JOIN 中的所有行都具有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com