sql >> データベース >  >> RDS >> Mysql

MYSQL:GROUP BY、LEFT JOIN、WHERE句を含むCOUNTはゼロ値を返しません

    ゼロ行を返す理由は、table_1の値でグループ化しているためです。 table_1には値がないため、返す行はありません。別の言い方をすれば、GROUP BYからクエリでt1.any_colを返した場合は、次のようになります。

    SELECT `t1`.`any_col`, COUNT(`t2`.`name`) 
    FROM `table_1` `t1` 
        LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id` 
    WHERE `t1`.`another_column` = 123 
    GROUP BY `t1`.`any_col` 
    

    行がない場合、t1.any_colには何が表示されますか?必要なことを実現する唯一の方法は、table_1に行がないかどうかをチェックする別のクエリと結果を結合することです。この例では、INFORMATION_SCHEMAビューを使用して、クエリを実行できるものを用意しています。

    SELECT COUNT(`t2`.`name`) 
    FROM `table_1` `t1` 
        LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id` 
    WHERE `t1`.`another_column` = 123 
    GROUP BY `t1`.`any_col` 
    UNION ALL
    SELECT 0
    FROM INFORMATION_SCHEMA.TABLES
    Where Not Exists( Select 1 From `table_1` )
    LIMIT 1
    


    1. MySQLとMariaDBでテーブルを一覧表示する方法

    2. テーブルを結合せずにPHPで2つ以上のSQLクエリを実行する方法

    3. MYSQLカーソルループ、1ラウンド余分に実行します、なぜですか?

    4. MYSQL別のテーブルからIDを挿入