SQL查询以获取所有产品类别以及产品是否在其中

标签 sql mysql

我有三个表。产品、产品类别和产品类别链接。链接表在那里,因为一种产品可以属于多个类别。

我想要实现的是所有类别的列表,其中包含一个附加字段,该字段说明是否针对该特定产品 ID,如果该产品属于该类别。

SELECT *, l.product_id as checked FROM `ProductCategories` LEFT JOIN ProductCategoriesLink l ON l.category_id = ProductCategories.id WHERE ( l.product_id = 1 ) AND ( ProductCategories.id > 0 ) GROUP BY ProductCategories.id ;

但是目前,这只会检索产品所属的类别。

感谢任何建议。

最佳答案

SELECT
    ProductCategories.*,
    l.product_id IS NOT NULL AS ProductInCategory
FROM
    ProductCategories
    LEFT JOIN ProductCategoriesLink AS l ON
        ProductCategories.id = l.category_id AND
        l.product_id = 1

这利用了这样一个事实,即当执行 LEFT JOIN 时,左侧表中的每一行至少返回一行。如果右侧表中没有匹配的行,则该表中的列均为 NULL

关于SQL查询以获取所有产品类别以及产品是否在其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179404/

相关文章:

java - 在 JDateChooser 中显示数据库中的日期

sql - 从传递多个表值参数的存储过程执行表值函数?

php - 同时使用 PDO 和 mysql_connect - 性能

python - SQLAlchemy 双向删除级联(没有 ORM)

php - 如何在 Laravel Eloquent 中选择某些字段?

c# - EntityFramework 和 MySql,归档

mysql - 无法将数据插入数据库

mysql - 最后一分钟每个表的数据

sql - postgresql join on max(date) 和另一个索引

php - mySql @变量在不同客户端的行为有所不同