我有两个表:
- 产品: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
使用内部联接。
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。这不会过滤掉记录,如果没有值可联接,则简单地为所有列返回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
这应该有效:
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
试试这个:
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
你只需要在每个字段上进行连接,就可以得到合适的颜色。