【发布时间】:2016-08-17 19:01:29
【问题描述】:
我有 4 张桌子:
表 1(组):
id_group name_group
1 abc
2 def
3 ghi
表2(颜色):
id_color name_color
1 blue
2 red
3 green
Table3(品种):
id_variety id_color id_group name_variety
1 1 1 light
2 3 1 dark
3 6 2 dark
Table4(音调):
id_tone id_color id_group name_tone
1 1 1 ocean
2 5 1 sea
3 9 3 clay
给定一个像 1 这样的 id_group,我想做一个选择,结果如下:
id_group id_color name_variety name_tone
1 1 light ocean
1 3 dark NULL
1 5 NULL sea
我能够通过联合解决问题并更改 JOINS 的顺序,但我认为必须有另一种解决方案
SELECT
GRO.id_group, COL.id_color, VARI.name_variety, TONE.name_tone
FROM
groups GRO
LEFT OUTER JOIN
variety VARI ON (VARI.id_group = GRO.id_group)
LEFT OUTER JOIN
tone TONE ON (TONE.id_group = GRO.id_group)
AND (TONE.id_color = VARI.id_color)
LEFT OUTER JOIN
color COL ON (COL.id_color = VARI.id_color)
OR (COL.id_color = TONE.id_color)
WHERE
GRO.id_group = 1
UNION
SELECT
GRO.id_group, COL.id_color, VARI.name_variety, TONE.name_tone
FROM
groups GRO
LEFT OUTER JOIN
tone TONE ON (TONE.id_group = GRO.id_group)
LEFT OUTER JOIN
variety VARI ON (VARI.id_group = GRO.id_group)
AND (VARI .id_color = TONE.id_color)
LEFT OUTER JOIN
color COL ON (COL.id_color = VARI.id_color)
OR (COL.id_color = TONE.id_color)
WHERE
GRO.id_group = 1
【问题讨论】:
-
您说您有三张桌子,但我认为组是第四张桌子。所以你有三四张桌子?
-
你说得对,我有三个以上的表,但我猜没有必要显示组的表内容。不过我会编辑,谢谢!
标签: sql