我有一个表格garages
,结构如下:
garageid | car1 | car2 | car3
carN字段包含来自另一个表cars
的ID:
carN | make | color
有没有办法在单个查询中获取特定车库的颜色列表?
结果将是:
garageid | color1 | color2 | color3
我意识到这种结构没有规范化,但汽车的数量永远不会改变。有没有办法做到这一点?
答案 0 :(得分:3)
使用id存储多个列通常不是一个好方法。每辆车最好有一排。也就是说,您可以使用多个连接执行您想要的操作:
select g.garageid, c1.color as color1, c2.color as color2, c3.color as color3
from garages g left join
cars c1
on g.car1 = c1.carid left join
cars c2
on g.car2 = c2.carid left join
cars c3
on g.car3 = c3.carid;
即使一个或多个车辆ID为left join
,garage
仍会返回NULL
。
答案 1 :(得分:0)
在我看来,最好有一张桌子t_garage_cars:
garageId carId
以这种方式回溯数据很简单。
如果由于某种原因这是不可能的,我相信你只能使用游标可以使用临时表