我在下面列出了 3 个表:
表_A:
order_number | header_id
123 | 80001
Run Code Online (Sandbox Code Playgroud)
表_B
header_id | line_id | quantity
80001 | 10001 | 1
80001 | 10002 | 3
80001 | 10003 | 5
Run Code Online (Sandbox Code Playgroud)
表_C
header_id | line_id | hold_price_id | released_flag
80001 | 10001 | 2001 | Y
80001 | 10002 | 2002 | Y
80001 | 10003 | 2003 | N
Run Code Online (Sandbox Code Playgroud)
我写了一个查询,如下所示:
SELECT A.order_number, A.header_id, B.line_id, B.quantity, C.hold_price_id, C.released_flag
FROM Table_A a,
Table_B b,
Table_C c
WHERE a.header_id = b.header_id
AND c.line_id = b.line_id
AND a.order_number = '123';
Run Code Online (Sandbox Code Playgroud)
我的愿望输出如下所示:
order_number | header_id | line_id | quantity | hold_price_id | released_flag
123 | 80001 | 10001 | 1 | 2001 | Y
123 | 80001 | 10002 | 3 | 2002 | Y
123 | 80001 | 10003 | 5 | 2003 | N
Run Code Online (Sandbox Code Playgroud)
但是查询显示了以下结果:
order_number | header_id | line_id | quantity | hold_price_id | released_flag
123 | 80001 | 10001 | 1 | 2001 | Y
123 | 80001 | 10001 | 3 | 2002 | Y
123 | 80001 | 10001 | 5 | 2003 | N
123 | 80001 | 10002 | 1 | 2001 | Y
123 | 80001 | 10002 | 3 | 2002 | Y
123 | 80001 | 10002 | 5 | 2003 | N
123 | 80001 | 10003 | 1 | 2001 | Y
123 | 80001 | 10003 | 3 | 2002 | Y
123 | 80001 | 10003 | 5 | 2003 | N
Run Code Online (Sandbox Code Playgroud)
我的查询有问题吗?请指教。
谢谢!
Gor*_*off 10
您需要学习使用正确的显式join语法。一个简单的规则:永远不要在from子句中使用逗号。 始终使用显式joins:
SELECT A.order_number, A.header_id, B.line_id, B.quantity,
C.hold_price_id, C.released_flag
FROM Table_A a JOIN
Table_B b
ON a.header_id = b.header_id JOIN
Table_C c
ON c.header_id = b.header_id AND c.line_id = b.line_id
WHERE a.order_number = '123';
Run Code Online (Sandbox Code Playgroud)
你还没有加入所有的公共键,所以你得到了笛卡尔结果。您需要将 a 与标头 id 连接到 c,就像这样
SELECT A.order_number, A.header_id, B.line_id, B.quantity, C.hold_price_id, C.released_flag
FROM Table_A a,
Table_B b,
Table_C c
WHERE a.header_id = b.header_id
AND c.line_id = b.line_id
AND a.header_id = c.header_id
AND a.order_number = '123';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49805 次 |
| 最近记录: |