我有一个mysql查询,其中有2个内部联接和一个左联接。我想要来自左侧联接表的所有数据
我的查询如下:
select ordernumber,PartDescription,partNumber
from orders
inner join orderDetail on orders.orderID = orderDetail.orderID
left join parts on orderdetail.partID = parts.partID
inner join inventory on parts.partid = inventory.partid
但是,此查询仅给我5或6行,而不是零件表中的100行。
答案 0 :(得分:1)
混合使用内部联接和左联接时,结果不是左联接。
另外,由于您希望表parts
的所有行都设为 left 表:
select o.ordernumber, p.PartDescription, p.partNumber
from parts p
left join inventory i on p.partid = i.partid
left join orderdetail od on p.partID = od.partID
left join orders o on o.orderID = od.orderID
使用别名作为表名,使代码更易于阅读。
同时使用表名称/别名限定所有列。
尽管我看不到它是必需的,但我仍保留在表inventory
的联接中。
答案 1 :(得分:0)
尝试从零件表开始,然后从那里开始连接。没有任何数据,这是最佳尝试:
select ordernumber, PartDescription, partNumber
from parts
left join orderdetail on parts.partID = orderdetail.partID
inner join orders on orders.orderID = orderDetail.orderID
inner join inventory on parts.partid = inventory.partid
答案 2 :(得分:0)
您是内部包含零件的零件,这些零件将仅使用公共数据,因此减少了行数。也尝试左联接。