1

CONCAT を使用するクエリで発生しているが、concat が null の場合でもグループを返す必要があるこの問題を解決する方法について、いくつかのトピックを検索しましたが、うまくいかない 2 つの解決策が見つかりました。

最初の解決策は、ISNULL を使用することでした。

#1582 - Incorrect parameter count in the call to native function 'ISNULL'

2 つ目は、部分的に機能する IFNULL を使用することでした。null ではないものを見つけますが、null のものは出力しません。

クエリは次のとおりです。

  SELECT g.name, IFNULL(GROUP_CONCAT(c.name),'') AS commands
    FROM site_access b
    JOIN groups g ON b.group_id = g.id
    JOIN group_commands gc ON g.id = gc.group_id
    JOIN commands c ON gc.command_id = c.id
   WHERE b.site_id = 1
GROUP BY g.name
ORDER BY g.status ASC

8 つの site_access、8 つのグループがあり、現在登録されており、グループ 1 とグループ 2 に割り当てられているコマンドは 2 つだけです。現在、これら 2 つのグループは出力されますが、コマンドがないため残りはすべて無視されます。

出力の例を次に示します。

Admin - add, del, announce
Member - find

望ましい出力:

Admin - add, del, announce
Member - find
Banned
OhterGroup1
OhterGroup2
OhterGroup3
OhterGroup4
OhterGroup5

テーブルに関する詳細情報が必要な場合は、そのサンプルがここにあり ます。

4

1 に答える 1

2

代わりにaLEFT JOINを使用してみてください。このクエリでtoも移動されていることにgroups_commands注意してください。JOINcommands

SELECT g.name, IFNULL(GROUP_CONCAT(c.name),'') AS commands
FROM site_access b
    INNER JOIN groups g 
        ON b.group_id = g.id
    LEFT JOIN group_commands gc
        INNER JOIN commands c 
            ON gc.command_id = c.id
        ON g.id = gc.group_id
WHERE b.site_id = 1
GROUP BY g.name
ORDER BY g.status ASC
于 2011-06-24T21:24:03.053 に答える