我有一个包含以下内容的MySQL数据库:
Products
id | name | indexname |units
--------------------------------------------
1 |Mydełko Fa |FA_INDEX |szt.
2 |Ręcznik elegancki |RECZNIK_ELEG |szt.
3 |Płyn do czyszczenia|CZYS_PLYN |l
Prices
id | user_id | product_id | price
-----------------------------------
2 |NULL |1 |21.32
3 |3 |1 |20
4 |NULL |2 |43.21
5 |NULL |3 |12.12
因此,您可以看到ID为1的产品有2个价格。我想准备一个将返回的查询
id | name | indexname |units |price
---------------------------------------------------
1 |Mydełko Fa |FA_INDEX |szt. |20
2 |Ręcznik elegancki |RECZNIK_ELEG |szt. |43.21
3 |Płyn do czyszczenia|CZYS_PLYN |l |12.12
所以我想要的是获取user_id为3的所有行,或者如果这样的行不存在则为user_id为null的行。
我试过
SELECT *
FROM `products` p1
JOIN `prices` p2 ON p1.id = p2.product_id
WHERE `user_id` = 3 OR `user_id` is null
和其他一些人没有成功......你能帮帮忙吗?
答案 0 :(得分:2)
一种简单的方法是同时获取两者,当然如果该用户不存在用户价格,您将获得空值:
SELECT p1.*, p2.price AS null_price, p3.price AS user_price
FROM `products` p1
JOIN `prices` p2 ON p1.id = p2.product_id AND `p2.user_id` IS NULL
LEFT JOIN `prices` p3 ON p1.id = p3.product_id AND `p3.user_id` = 3
然后使用您使用的任何编程语言来确定该字段是否为空,以及使用哪个价格。
答案 1 :(得分:0)
我认为你需要的是:
SELECT * FROM products p1
LEFT JOIN prices p2 ON p1.id = p2.product_id
WHERE user_id IS NOT NULL OR p2.product_id IN (
SELECT product_id FROM prices GROUP BY product_id HAVING COUNT(*) = 1)
答案 2 :(得分:0)
试试这个:http://sqlfiddle.com/#!2/bfd50/1/0
SELECT *
FROM products p
JOIN prices pr ON pr.product_id = p.id
WHERE pr.user_id = 3 OR pr.user_id IS NULL;
如果没有给出您收到的错误,提供具体答案有点困难。