0

我有两个具有以下结构的 MySQL 表:

TABLE `orders`

order_id
order_date
product_id

TABLE `products`

product_id
product_name
product_price
product_type

我想显示表订单中的所有行,如果表产品中有 product_id 则显示该产品的所有数据。如果没有,则仅显示订单表中的所有数据。

我试过这个:

SELECT * FROM orders AS o RIGHT JOIN products AS p ON o.product_id=p.product_id

但是,如果我们在订单表中有一个 product_id 行,而该行在 products 表中不存在,则不会显示来自 orders 的行。无论产品表中是否有 product_id,我都希望显示订单 ID 中的行。如果有 JOIN 它,如果它不只显示来自表订单的数据。

有什么建议么?

4

1 回答 1

2

你应该做一个LEFT JOIN

使用左连接, 将返回所有行。如果不满足条件,则表中ORDERS的列products将是。nulljoin

SELECT    o.*,p.* 
FROM      orders AS o 
LEFT JOIN products AS p 
       ON o.product_id=p.product_id`

请参阅MySQL 手动连接语法

于 2013-08-05T12:56:09.833 回答