如何从两个表中选择数据,其中一个表包含多个带有ids的列

时间:2012-03-18 15:36:41

标签: mysql sql

我有两张桌子:

  • 产品:id,product_name,color_1(id),color_2(id),color_3(id)
  • 颜色:id,颜色

我想选择所有带颜色的产品。

产品:

id  product_name    color_1(id) color_2(id) color_3(id)
--------------------------------------------------------
1   Apple       1       2       3
2   Table       2       3       0

颜色

id  color
---------
0   False
1   Blue
2   Green
3   Yellow

我想进入一个查询:

1   Apple       Blue        Green       Yellow
2   Table       Green       Yellow      False

3 个答案:

答案 0 :(得分:4)

使用内部联接。

SELECT     p.product_name, c1.color, c2.color, c3.color
FROM       Products p
INNER JOIN Colors c1 ON c1.id = p.color_1
INNER JOIN Colors c2 ON c2.id = p.color_2
INNER JOIN Colors c3 ON c3.id = p.color_3

根据您的评论

如果您想在某些产品颜色ID不适用的情况下获得结果,请切换到LEFT OUTER JOIN。这不会过滤掉记录,如果没有要连接的值,则simple会为所有列返回NULL。

SELECT          p.product_name, c1.color, c2.color, c3.color
FROM            Products p
LEFT OUTER JOIN Colors c1 ON c1.id = p.color_1
LEFT OUTER JOIN Colors c2 ON c2.id = p.color_2
LEFT OUTER JOIN Colors c3 ON c3.id = p.color_3

答案 1 :(得分:1)

这应该有效:

select p.id, p.product_name, c1.color, c2.color, c3.color
from products p, colors c1, colors c2, colors c3
where c1.id=p.color_1 and
      c2.id=p.color_2 and
      c3.id=p.color_3

答案 2 :(得分:0)

试试这个:

select p.id, p.product_name, c1.color color_1, c2.color color_2, c3.color color_3
from products p
join colors c1 on p.color_1 = c1.id
join colors c2 on p.color_2 = c2.id
join colors c3 on p.color_3 = c3.id

您只需要在每个字段上建立连接以获得适当的颜色。