gpt4 book ai didi

sql - 您将如何构造此 SQL 查询? (MySQL)

转载 作者:行者123 更新时间:2023-11-29 04:58:48 25 4
gpt4 key购买 nike

假设我们有这些表:

产品

product_id
product_name

类别

category_id
category_name

product_in_category
product_in_category_id
product_id
category_id

如何获取 product_in_category 表中不属于特定类别的所有产品(没有重复)。

换句话说,例如,所有未分配到类别 10 的产品。此外,如果一种产品属于类别 1、5 和 10,则不应出现在结果中。

最佳答案

使用 LEFT JOIN/IS NULL:

   SELECT p.*
FROM PRODUCT p
LEFT JOIN PRODUCT_IN_CATEGORY pic ON pic.product_id = p.product_id
AND pic.category_id = 10
WHERE pic.product_in_category_id IS NULL

使用 NOT IN

SELECT p.*
FROM PRODUCT p
WHERE p.product_id NOT IN (SELECT pic.product_id
FROM PRODUCT_IN_CATEGORY pic
WHERE pic.category_id = 10)

使用 NOT EXISTS

SELECT p.*
FROM PRODUCT p
WHERE NOT EXISTS (SELECT NULL
FROM PRODUCT_IN_CATEGORY pic
WHERE pic.product_id = p.product_id
AND pic.category_id = 10)

哪个最好?

这取决于被比较的列是否可以为空(值可以为 NULL)。如果他们是 nullable, then NOT IN/NOT EXISTS are more efficient .如果列是 not nullable, then LEFT JOIN/IS NULL is more efficient (MySQL only) .

关于sql - 您将如何构造此 SQL 查询? (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3929895/

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