SQL 仅选择不包含相关表中使用的 ID 的行

标签 sql select

我有两个具有简单关系的表。一张表是销售 list 。第二个表是产品列表。关系是 Sales 表中有一个指向给定产品的 Product ID。

我需要检索从未售出的产品的详细信息。

以下是两个表的链接: Table with Products & Table with Sales

如果您不想单击它,表格如下所示:

**SALES**

id
sale_id
product_id
quantity

**PRODUCTS**

id
name
category_id
stock
brand_id
price
color
warranty

到目前为止我有这个:

SELECT products.id 
FROM products 
LEFT JOIN sale_products ON sale_products.product_id = products.id 
WHERE products.id NOT IN (sale_products.product_id) 
GROUP BY products.id

但这不会检索到任何内容,尽管如果我取出 NOT,那么我会得到 17 件已售商品的所有 17 个 ID...

所以我想说它要么必须改变,要么用完全不同的方法来完成..

非常感谢并欢迎任何帮助。

最佳答案

试试这个:

 SELECT products.id 
    FROM products 
    LEFT JOIN sale_products ON sale_products.product_id = products.id 
    WHERE sales_products.product_id IS NULL
    GROUP BY products.id

您正在询问所有产品,并且对于每种产品,要么获取销售记录,要么如果没有找到销售记录,则为 sales_product 表中的每一列返回 NULL。

关于SQL 仅选择不包含相关表中使用的 ID 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16589239/

相关文章:

sql - SQL 数据库过载的原因是什么?

sql - 如何在 oracle 中创建 "singleton"计划作业?

PHP 从两个表中选择无法正常工作

mysql - 在 MySQL 中合并 2 个计数

sql - 实现表级检查约束

sql - 如何将UNION查询结果移动到新表?

mysql - 在某种条件下找到每件元素和最昂贵的元素

c++ - 在 C++ 中使用 readv()、writev() 和 poll()

jquery:在嵌套元素中找到parent()*n?

mysql - 选择上周内的日期,但不仅限于过去 7 天