如何使用表作为“桥”来INNER JOIN在另一个表中获取另一个值?

时间:2017-08-01 03:51:21

标签: php mysql

嗯,标题可能令人困惑,但这正是我想要做的。我有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行以下)

3 个答案:

答案 0 :(得分:2)

您需要使用id_objecttable_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'

DEMO

答案 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