我在MySQL数据库中设置了一个视图。该视图引用了几个相关的表并将它们连接在一起。这是一个选择语句来举例说明:
SELECT
orders.id,
orders.`name`,
orders.total,
line_items.id,
line_items.order_id,
line_items.sub_total,
order_fees.id,
order_fees.order_id,
order_fees.`name`,
order_fees.fee
FROM
orders
INNER JOIN line_items ON line_items.order_id = orders.id
INNER JOIN order_fees ON order_fees.order_id = orders.id
我遇到的问题是订单可能会或可能不会收取额外费用。似乎发生的情况是,当order_fees表中没有给定订单的记录时,select语句将不会返回订单。
如何进行设置,以便无论相关记录是否存在,都会从查询中返回所有订单?
答案 0 :(得分:1)
使用left join
代替inner join
:
SELECT
orders.id,
orders.`name`,
orders.total,
line_items.id,
line_items.order_id,
line_items.sub_total,
order_fees.id,
order_fees.order_id,
order_fees.`name`,
order_fees.fee
FROM
orders
Left JOIN line_items ON line_items.order_id = orders.id
Left JOIN order_fees ON order_fees.order_id = orders.id
答案 1 :(得分:1)
用户左外连接而不是内连接。当您进行内部联接时,它将仅返回两个表中可用的记录。如果使用Left outer join,则它将返回左表中的所有记录。