什么是正确的加入?

时间:2018-03-19 17:28:58

标签: sql

我有两张桌子:

产品

Id Integer
Name Character Varying(200)

订单

Id Integer
Product_Id integer
Started Timestamp

我需要一起获取包含产品ID和名称的所有订单。

我尝试过使用内部联接:

select orders.id, orders.started, products.id, products.name
from orders inner join
     products
     on products.id = order.product_id

但它没有显示一些没有产品链接的订单(服务订单)。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

当您在第二个表格中没有总是有元素时,您应该使用“左连接” - >它将从左表中检索所有行,即使右表没有匹配的行。

像这样:

select orders.id, orders.started, products.id, products.name from orders 
left join products on products.id = order.product.id

答案 1 :(得分:0)

您需要在Orders表中对Product表执行LEFT JOIN。

SELECT [Your Columns]
FROM Orders o
     LEFT OUTER JOIN Products p ON o.ProductID = p.ID

左连接仍将从Orders中检索所有行,并在匹配时从Product表中检索数据。如果Products表中没有ProductID,那么您尝试从Products表中提取的数据将只是NULL。

使用内部联接要求连接的列存在于两个表中。例如,如果您有Orders.ProductID = 7,则产品必须具有ID = 7的行,否则您的查询将不会返回该订单的行。