gpt4 book ai didi

mysql - 这两个 SQL 查询之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 11:44:30 24 4
gpt4 key购买 nike

所以我正在测试 2 个查询,但得到了不同的结果。我想纠正/修补我的理解。这是两个通用的 SQL 查询,据我所知它们是相同的,但执行时得到不同的结果。请注意,这不是关于 diff between ANSI and non-ANSI SQL 的问题。 .

查询 1(使用 LEFT JOIN):

SELECT * FROM person p LEFT JOIN person_log pl
ON p.person_id = pl.person_id
WHERE pl.person_id IS NULL
AND p.is_active = 1;

查询 2(使用 2 个查询):

SELECT * FROM person
WHERE person.is_active = 1
AND person_id NOT IN (SELECT person_id FROM person_log);

据我了解,represent this in venn diagram form .另外,一个比另一个更有效吗?对 JOIN 结果的查询与 2 个查询的比较?

编辑:在查询 1 中将 = 更改为 IS。感谢@Justin Samuel 发现导致不同结果的 = 错误!

最佳答案

上面的查询1有一个bug,不能用“=”来判断是否为NULL

SELECT * FROM person p LEFT JOIN person_log pl
ON p.person_id = pl.person_id
WHERE pl.person_id = NULL
AND p.is_active = 1;

理想情况下你应该使用 IS NULL

SELECT * FROM person p LEFT JOIN person_log pl
ON p.person_id = pl.person_id
WHERE pl.person_id IS NULL
AND p.is_active = 1;

您可以在 https://www.simple-talk.com/sql/t-sql-programming/how-to-get-nulls-horribly-wrong-in-sql-server/ 中查看 NULL 检查

关于mysql - 这两个 SQL 查询之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39624724/

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