TABLE 'styles'
id|style_code
1|6110
2|6120
3|6250
TABLE 'colour'
id|colour_code
1|1001
2|1012
3|1033
4|1050
TABLE 'styleColour'
id|style_id|colour_id|cancelled
1 | 1 | 1 |
2 | 1 | 2 | y
3 | 2 | 1 |
4 | 2 | 3 |
5 | 2 | 4 |
6 | 3 | 1 |
7 | 3 | 2 |
8 | 3 | 3 | y
9 | 3 | 4 | y
TABLE 'orders'
id|style_code|colour_code
1 | 6110 | 1001
2 | 6110 | 1012
3 | 6130 | 1001
4 | 6130 | 1033
5 | 6130 | 1050
6 | 6250 | 1033
7 | 6250 | 1050
Output wanted (based on 'order' table):
style_code|colour_code|cancelled
6110 | 1001 |
6110 | 1012 | y
6130 | 1001 |
6130 | 1033 |
6130 | 1050 |
6250 | 1033 | y
6250 | 1050 | y
需要哪些联接才能将“已取消”列引用到“订单”表输出上的相应style_code和colour_code组合?
请注意,尽管显示'style_code'和'colour_code'数据似乎很奇怪,而不是由style_id和colour_id表示,但这是导入原因所必需的。
谢谢和亲切的问候, 德里克。
答案 0 :(得分:0)
根据以下评论更新答案 -
SELECT orders.style_code,orders.colour_code,styleColour.cancelled
FROM orders
LEFT JOIN colours ON orders.colour_code=colours.colour_code
LEFT JOIN styles ON orders.style_code=styles.style_code
LEFT JOIN styleColour ON styleColour.style_id=styles.id
AND styleColour.colour_id=colours.id;
但是,如果您JOIN
/ colours
上的styles
位于id
列,而不是code
列(我假设为{{1}它是主键),它可能更快(因为主键被索引)。
这是我的尝试。我没有测试过,但试一试:
id
全部SELECT orders.style_code,orders.colour_code,styleColour.cancelled
FROM styleColour
RIGHT JOIN colours ON orders.colour_id=colours.id
RIGHT JOIN styles ON orders.style_id=styles.id
RIGHT JOIN orders ON orders.style_code=styles.style_code
AND orders.colour_code=colours.colour_code;
的原因是根据RIGHT JOIN
中的行而不是orders
进行所有加入。