Mysql 避免空返回集
当查询没有找到我要查找的内容时,如何使查询始终返回某个默认值 例如,在以下查询中:Mysql 避免空返回集,mysql,sql,Mysql,Sql,当查询没有找到我要查找的内容时,如何使查询始终返回某个默认值 例如,在以下查询中: SELECT food_id, drink_id, payment_amount, count(*) AS total_payments, payment_amount * count(*) AS total_benefit FROM foods pc
SELECT
food_id,
drink_id,
payment_amount,
count(*) AS total_payments,
payment_amount * count(*) AS total_benefit
FROM foods pc
INNER JOIN drinks px
ON pc.id = px.food_id
AND pc.drink_id = 25
GROUP BY food_id, drink_id;
当pc.id不等于px.food_id时,我得到一个空集。我正在寻找一些东西,例如:
SELECT
food_id DEFAULT IF NOTHING 5,
drink_id DEFAULT IF NOTHING 25,
payment_amount DEFAULT IF NOTHING 0,
count(*) AS total_payments DEFAULT IF NOTHING 0,
payment_amount * count(*) AS total_benefit DEFAULT 0
FROM foods pc
INNER JOIN drinks px
ON pc.id = px.food_id
AND pc.drink_id = 25
GROUP BY food_id, drink_id;
有没有办法做类似的事情 您可能想要:
等等。您可能需要:
等等。由于内部联接,您将得到一个空结果集。这可能是一个外部连接。将此与Rup的答案结合起来可能就是您想要的:
SELECT
COALESCE(food_id, 0) AS food_id,
COALESCE(drink_id, 25) AS drink_id,
COALESCE(payment_amount, 0) as payment_amount,
count(*) AS total_payment,
COALESCE(payment_amount, 0) * count(*) AS total_benefit
FROM foods pc
LEFT OUTER JOIN drinks px
ON pc.id = px.food_id
AND pc.drink_id = 25
GROUP BY food_id, drink_id;
由于内部联接,您得到的结果集为空。这可能是一个外部连接。将此与Rup的答案结合起来可能就是您想要的:
SELECT
COALESCE(food_id, 0) AS food_id,
COALESCE(drink_id, 25) AS drink_id,
COALESCE(payment_amount, 0) as payment_amount,
count(*) AS total_payment,
COALESCE(payment_amount, 0) * count(*) AS total_benefit
FROM foods pc
LEFT OUTER JOIN drinks px
ON pc.id = px.food_id
AND pc.drink_id = 25
GROUP BY food_id, drink_id;
仅当输出字段中存在包含空值的结果集时,此操作才有效。补偿一个空的结果集是不起作用的。@Dems D'oh,是的,错过了+1到Tevo。仅当输出字段中存在包含空值的结果集时,此操作才有效。补偿一个空的结果集是不起作用的。@Dems D'oh,是的,错过了+1到Tevo。这将始终返回所有食物,即使它们与指定的饮料无关。我不确定OP想要什么,所以+1直到OP澄清:)这将始终返回所有食物,即使它们与指定的饮料无关。我不确定OP想要什么,所以+1直到OP澄清:)
SELECT food_id, drink_id, payment_amount, COUNT(*) AS total_payments,
payment_amount * COUNT(*) AS total_benefit
FROM foods pc
INNER JOIN drinks px
ON pc.id = px.food_id
AND pc.drink_id = 25
GROUP BY food_id, drink_id
UNION
SELECT 0, 0, 0, 0, 0
FROM MySystemTableAlwaysHasExactlyOneRow
WHERE NOT EXISTS (
SELECT *
FROM foods pc
INNER JOIN drinks px
ON pc.id = px.food_id
AND pc.drink_id = 25
) ;