我有两张桌子:
产品
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
但它没有显示一些没有产品链接的订单(服务订单)。 我做错了什么?
答案 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的行,否则您的查询将不会返回该订单的行。