SQL如何选择父级id或id(如果没有父级)参数

时间:2016-11-27 09:50:54

标签: mysql sql

嗨,我有数据库,包括表:products,product_colors,colors。

产品具有属性: id,name,...

Product_colors 具有以下属性: id,products_id,colors_id

颜色具有属性: id,colors_id,name

因此,Product产品颜色中的行由products.id = product_colors.products_id连接 和product_colors.colors_id = colors.id

之间的colors_id的下一个连接

产品:

id     name
-------------------
1      produkt1
2      produkt2
3      produkt3

Product_colors:

id     products_id      colors_id
1      1                1 
2      1                5
3      2                1 
4      2                3
5      3                6

颜色可以在colors_id上有父级:

id     colors_id      name
__________________________________
1      null           red
2      null           green
3      1              flashred
4      2              kiwi 
5      2              lightgreen
6      null           black

红   - >闪光,橙色

绿色   - >猕猴桃,浅绿色,深绿色

如果参数颜色为红色和浅绿色,则如何获得包含所有父颜色(作为参数)的所有产品 - >比选定的产品应该具有红色和绿色的颜色

所以我需要得到参数的父颜色(如果参数没有父我参数颜色),这个父颜色通过这个数组使用IN选择产品给数组a。 我想在MYSQL

中这样做
SELECT products.id AS id
        FROM products
        LEFT JOIN product_colors
            ON products.id = product_colors.products_id
        LEFT JOIN colors
            ON product_colors.colors_id = colors.id
        WHERE colors.id IN (1,5)

1,5是参数

对于参数[1,5],我想得到id为1的结果产品

1 个答案:

答案 0 :(得分:0)

解决方案将涉及再次重新加入COLORS表,以获取父颜色数据。

如果你有另外一个这样的连接:

LEFT JOIN colors PARENT_COLOR ON colors.colors_id = PARENT_COLOR.id

然后您可以使用此PARENT_COLOR表来显示或过滤此表中的结果。