MySQL视图中缺少数据

时间:2015-01-30 22:05:27

标签: mysql

我在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语句将不会返回订单。

如何进行设置,以便无论相关记录是否存在,都会从查询中返回所有订单?

2 个答案:

答案 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,则它将返回左表中的所有记录。