我有一张这样的桌子:
+---------+-------+
| Fruits | Price |
+---------+-------+
| Apple | 2.00 |
| Orange | 3.00 |
| Banana | 4.00 |
+---------+-------+
如果Fruits
列中没有Grapes
,则
我如何退回0价格
喜欢
+---------+-------+
| Fruits | Price |
+---------+-------+
| Grape | 0.00 |
+---------+-------+
这是我的查询
Select
Fruits,
Price
From
Products
答案 0 :(得分:1)
您可以这样做:
select x.*
from (select 'Grapes' as fruit, 0.00 as price) x
where not exists (select 1 from atable t where t.fruit = 'Grapes');
答案 1 :(得分:1)
理想情况下,您将有一个表,其中包含要显示在报告中的所有水果的名称。因此,类似这样的方法应该起作用:
SELECT
p.Fruits,
COALESCE(p.Price, 0.00) AS Price
FROM
(
SELECT 'Apple' AS Fruits UNION ALL
SELECT 'Orange' UNION ALL
SELECT 'Banana' UNION ALL
SELECT 'Grape'
) AS all_fruits
LEFT JOIN Products p
ON all_fruits.Fruits = p.Fruits;
如果您只想查看不匹配的水果,则可以在查询末尾添加以下内容:
WHERE p.Fruits IS NULL
答案 2 :(得分:0)
这也是使用Select from the same table
来完成NOT IN
的另一种方式,如果表中有多行,它将返回重复值,因此我们可以使用DISTINCT
或{ LIMIT
中的{1}}
MYSQL
注意:如果表为空,它将不返回任何记录,我希望在这种情况下返回值也没有意义,但是如果您仍然希望返回一个值,那么在这种情况下,我必须对不起:)