gpt4 book ai didi

mysql - EXISTS 和 JOIN 检查记录是否存在的区别

转载 作者:行者123 更新时间:2023-11-29 01:35:04 24 4
gpt4 key购买 nike

看下面的例子:

SELECT *
FROM customers
WHERE EXISTS
(SELECT *
FROM order_details
WHERE customers.customer_id = order_details.customer_id)
;

检索相同结果集的两个表之间的等效基于内联接的查询有哪些差异?

我关心的是技术/性能方面,而不是代码的可读性/可维护性。

最佳答案

使用 EXISTS 子句,您可以选择至少存在一个 order_details 记录的所有客户。

SELECT * 
FROM customers c
WHERE EXISTS (SELECT * FROM order_details od WHERE od.customer_id = c.customer_id);

通过加入,您可以再次选择这些客户。但是,只要存在 order_detail,您就可以经常选择它们。 IE。你会有很多重复项。

SELECT c.*
FROM customers c
JOIN order_details od ON c.customer_id = od.customer_id;

您可以使用 DISTINCT 从结果中删除重复项,以便仅再次吸引每个客户:

SELECT DISTINCT c.*
FROM customers c
JOIN order_details od ON c.customer_id = od.customer_id;

但是为什么生成所有重复项却必须再次删除它们呢?不要这样做。仅当您确实想要加入结果时才加入。

顺便说一下,另一个选项是 IN 子句,我认为它比 EXISTS 子句更具可读性。这将是我编写查询的方式:

SELECT * FROM customers WHERE customer_id IN (SELECT customer_id FROM order_details);

关于mysql - EXISTS 和 JOIN 检查记录是否存在的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53740739/

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