Mysql 如果列没有特定文本,如何更改列的值?

Mysql 如果列没有特定文本,如何更改列的值?,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我有一张这样的桌子: +---------+-------+ | Fruits | Price | +---------+-------+ | Apple | 2.00 | | Orange | 3.00 | | Banana | 4.00 | +---------+-------+ 如果水果列没有葡萄,则 如何退回0的价格 像 这是我的问题 Select Fruits, Price From Products 你可以做: select x.* fr

我有一张这样的桌子:

+---------+-------+
| Fruits  | Price |
+---------+-------+
| Apple   | 2.00  |
| Orange  | 3.00  |
| Banana  | 4.00  |
+---------+-------+
如果
水果
列没有
葡萄
,则 如何退回0的价格 像

这是我的问题

Select
    Fruits, 
    Price
From
    Products
你可以做:

select x.*
from (select 'Grapes' as fruit, 0.00 as price) x
where not exists (select 1 from atable t where t.fruit = 'Grapes');

理想情况下,您应该有一个表,其中包含您希望在报告中显示的所有水果的名称。因此,类似这样的方法应该会奏效:

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

这里还有另一种方法,可以使用
NOT IN
从同一个表中进行相同的
选择,如果表中有多行,它将返回重复值,因此我们可以在
MYSQL
中使用
DISTINCT
LIMIT

SELECT DISTINCT 'Grapes' AS fruit, 
    0.00 AS price
FROM yourTable
WHERE 'Grapes' NOT IN (fruits)

注意:如果表为空,它将不会返回任何记录,我希望在这种情况下返回值也没有意义,但如果您仍然希望返回一个,那么我必须说对不起:)在这种情况下。

您应该添加此表中的所有结果,并为它们添加默认值,因为数据库无法神奇地插入一行。若某些列不包含值,它可以为这些列添加默认值,但若并没有行,那个么就并没有办法进行标识,所以您应该将它们添加到表中,而不是添加到查询中(这会使您的查询变得复杂)。
SELECT DISTINCT 'Grapes' AS fruit, 
    0.00 AS price
FROM yourTable
WHERE 'Grapes' NOT IN (fruits)