嗯,标题可能令人困惑,但这正是我想要做的。我有3张桌子。 2个表作为主表,一个表作为“桥”。
//table_po
po_no id_object qty price
A1 B1 5 500
A1 B2 10 650
A1 B3 15 750
A2 B1 7 450
A3 B4 9 800
//table_pks
pks_no id_object tipe qty_buy price_buy
C1 B1 ABC 1000 600
C1 B2 DEF 500 800
C1 B3 VWX 400 700
C2 B1 GHI 800 950
C2 B3 JKL 150 1500
C2 B2 MNO 8000 250
C3 B1 PQR 50 1000
C3 B4 STU 250 250
//table_ref
no po_no pks_no
1 A1 C1
2 A2 C1
3 A3 C3
table_ref控制哪个po_no应连接到哪个pks_no。这是我收集所需输出的查询:
SELECT
table_po.id_object,
table_pks.tipe,
table_po.qty,
table_po.price,
table_ref.pks_no
FROM table_po
INNER JOIN table_ref ON table_po.po_no= table_ref.po_no
INNER JOIN table_pks ON table_pks.pks_no = table_ref.pks_no
WHERE table_po.po_no = 'A1'
GROUP_BY table_pks.tipe
以上查询,显示所需的行,但数据不匹配。 table_po.qty
全是5
。如果我删除GROUP BY
数据是多余的。
我想要的输出:
id_object tipe qty price pks_no
B1 ABC 5 500 C1
B2 DEF 10 650 C1
B3 VWX 15 750 C1
注意: - 我更喜欢可靠性而非速度。 (收集和显示的数据通常在100行以下)
答案 0 :(得分:2)
您需要使用id_object
将table_pks
添加到加入条件。
由于您未使用任何汇总功能,因此无需GROUP BY table_pkd.tipe
。
SELECT
table_po.id_object,
table_pks.tipe,
table_po.qty,
table_po.price,
table_ref.pks_no
FROM table_po
INNER JOIN table_ref ON table_po.po_no= table_ref.po_no
INNER JOIN table_pks ON table_po.id_object = table_pks.id_object AND table_pks.pks_no = table_ref.pks_no
WHERE table_po.po_no = 'A1'
答案 1 :(得分:0)
(
select qty,price from table_po
join
select pks_no from table_ref where pks_no='C1'
on table_po.po_no= table_ref.po_no
)
as result_1
join
select pks_no,id_object,tipe from table_pks on result_1.pks_no=table_pks.pks_no
答案 2 :(得分:-1)
试试这个,
select r.po_no, r.pks_no, pks.tipe, po.qty
from table_ref r
left join table_po po on r.po_no = po.po_no
left join table_pks pks on r.pks_no = pks.pks_no