gpt4 book ai didi

sql - 将子查询转换为自联接

转载 作者:行者123 更新时间:2023-12-03 17:41:53 25 4
gpt4 key购买 nike

SQL的新手,我知道联接往往比子查询快。我有下表,我的当前查询为我提供了所需的结果,但是在可能的情况下,我无法绕过使用自连接的类似查询。



id           scheduled_id action_id
------------ ------------ ------------
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 1


架构图

create table ma (
id integer primary key,
scheduled_id integer,
action_id integer
);

insert into ma (
id,
scheduled_id,
action_id
)
values
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 2, 1),
(5, 2, 2),
(6, 3, 1);


询问

select * from ma where action_id = 3
union all
select * from ma where scheduled_id not in (
select scheduled_id from ma
where action_id = 3)


结果

id           scheduled_id action_id
------------ ------------ ------------
3 1 3
4 2 1
5 2 2
6 3 1


我的结果应该是action_id值为3的所有行,加上那些action_id值为3的chedched_id的所有行。

可以在 http://sqlfiddle.com/#!5/0ba51/3中找到sqlfiddle。

谢谢。

最佳答案

您使用自我联接的结果是:

SELECT DISTINCT t1.*
FROM ma t1
JOIN ma t2
ON t1.SCHEDULED_ID <> t2.SCHEDULED_ID --Satisfies 2nd query
WHERE t2.ACTION_ID = 3 --Satisfies 2nd query
OR t1.ACTION_ID = 3 --Satisfies 1st query
ORDER BY t1.ID

关于sql - 将子查询转换为自联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54698368/

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