选择不存在的属性

时间:2014-08-24 21:09:38

标签: sql join relation

我在3个表中命名了产品,属性和关系表product_attributes。您可以通过下面的示例条目查看它们。

products
id| product_name
1 | Product 1
2 | Product 2

attributes id| attribute 1 | length 2 | width 3 | height 4 | weight 5 | color

product_attributes id| product_id| attribute_id| value 1 | 1 | 1 | 120 2 | 1 | 2 | 60 3 | 2 | 1 | 100 4 | 2 | 3 | 40 5 | 2 | 5 | red

显示产品详细信息:

产品1 长度:120 宽度:60

产品1的未链接属性:
身高,体重,颜色

产品2 长度:100 身高:40 颜色:红色

产品2的未链接属性:
宽度,重量

我想要做的事情主要是,当我选择产品时,获取未链接的属性。 例如,当我选择产品1时,sql将返回 身高,体重,颜色

我知道可以用PHP完成它,但也知道它也可以用SQL完成。 我只是想集思广益。

如何使用SQL完成?特别是在MySQL?

2 个答案:

答案 0 :(得分:0)

我不认为这是最好的方式,但它应该有用。

SELECT attribute FROM attributes
WHERE id NOT IN (
    SELECT attribute_id FROM product_attributes
    WHERE product_id = '1')

答案 1 :(得分:0)

要获取指定产品的不存在的属性,我认为您应该使用此查询, 请注意,如果没有内部选择查询,此查询将获取不用于任何产品的属性。

SELECT attribute FROM attributes a
LEFT JOIN (SELECT * FROM product_attributes pa WHERE pa.product_id = 1 ) pa ON a.id = pa.id 
WHERE pa.id IS NULL