经过大量搜索后,我无法解决问题。我有以下表格:
我想从“产品”表中选择所有记录。但是我有问题执行以下查询时,我从“产品”表中获得了多行:
SELECT dbo.product.id, dbo.product.name, dbo.product_price.value
dbo.product_barcode.barcode
FROM dbo.product LEFT OUTER JOIN
dbo.product_price ON dbo.product.id = dbo.product_price.product_id LEFT OUTER JOIN
dbo.product_barcode ON dbo.product.id = dbo.product_barcode.product_id
我的问题已通过以下查询解决:
SELECT dbo.product.id, dbo.product.name, dbo.product_price.value
dbo.product_barcode.barcode
FROM dbo.product LEFT OUTER JOIN
dbo.product_price ON dbo.product.id = dbo.product_price.product_id LEFT OUTER JOIN
dbo.product_barcode ON dbo.product.id = dbo.product_barcode.product_id
WHERE (dbo.product_price.id IN
(SELECT MIN(id) AS minPriceID
FROM dbo.product_price AS product_price_1
GROUP BY product_id)) AND (dbo.product_barcode.id IN
(SELECT MIN(id) AS Expr1
FROM dbo.product_barcode AS product_barcode_1
GROUP BY product_id))
现在我只有一个问题。如果“ product_price”表或“ product_barcode”表没有任何记录,则不会返回任何记录。我的意思是,如果在“ product_price”或“ product_barcode”表中找不到类似的记录,我们将没有任何记录。而我们应该从“产品”表中获得记录,而其他表中的列为空。
请帮助我,谢谢。
答案 0 :(得分:2)
我认为问题在于条件在WHERE子句中-尝试将条件从WHERE子句移到每个联接中:
SELECT dbo.product.id, dbo.product.name, dbo.product_price.value,
dbo.product_barcode.barcode
FROM dbo.product
LEFT OUTER JOIN dbo.product_price ON dbo.product.id = dbo.product_price.product_id
--moved from WHERE clause
AND dbo.product_price.id IN (SELECT MIN(id) AS minPriceID FROM dbo.product_price AS product_price_1 GROUP BY product_id)
LEFT OUTER JOIN dbo.product_barcode ON dbo.product.id = dbo.product_barcode.product_id
--moved from WHERE clause
AND dbo.product_barcode.id IN (SELECT MIN(id) AS Expr1 FROM dbo.product_barcode AS product_barcode_1 GROUP BY product_id)
答案 1 :(得分:1)
SELECT dbo.product.id, dbo.product.name, MIN(dbo.product_price.value),MIN( dbo.product_barcode.barcode)
FROM dbo.product
LEFT OUTER JOIN dbo.product_price ON dbo.product.id = dbo.product_price.product_id
LEFT OUTER JOIN dbo.product_barcode ON dbo.product.id = dbo.product_barcode.product_id
GROUP BY dbo.product.id, dbo.product.name
虽然上述查询应能达到您想要的结果-一条商品的价格为mini_product_price(如果存在)和最低product_barcode(如果存在)的商品。
我只是假设您要根据正在编写的查询来执行此操作。您需要花更多时间思考您要回答的问题。
如果其中一张表中每个联接键有多个条目,则联接将使结果成倍增加。
答案 2 :(得分:0)