Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 避免空返回集_Mysql_Sql - Fatal编程技术网

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
                     ) ;