1

テーブルを表示するために自分のWebサイトに実装されるSQLクエリに取り組んでいます。この特定のクエリは、カウントする数で1つのテーブルセルのみを埋めます。

現在、以下の最後のINNER JOINのおかげで、表5で主キー(column1)が3回未満検出された場合にのみ、行がカウントされます。これまで、クエリは完全に機能します。

SELECT COUNT (a.column1) AS test
    FROM Table1 a
    INNER JOIN Table2 b ON […]
    INNER JOIN Table3 c ON […]
    INNER JOIN Table4 d ON […]
    INNER JOIN (SELECT column1 FROM Table 5 GROUP BY column1 HAVING COUNT (column1)<3) e ON e.column1=a.column1
    WHERE a.column2 IS NULL

問題は、Table5には表示されない(ただしTable1には存在する)行もカウントしたいということです。現在、これを機能させる唯一の方法は、次のコードを追加することです。

AND a.column1 NOT IN (SELECT f.column1 FROM Table5 f)

ただし、最後のINNER JOINが含まれていない場合にのみ機能し、両方の制約で機能させることはできません。基本的に、要約すると、主キー(column1)がtable5に3回未満しか表示されない場合、または単にtable5に表示されない場合は、行をカウントしたいと思います。

ありがとうございました。

4

1 に答える 1

2

を実行し、 :に存在しない条件をLEFT JOIN追加する必要があります。<3WHERE

SELECT COUNT (a.column1) AS test
FROM Table1 a
INNER JOIN Table2 b 
    ON […]
INNER JOIN Table3 c 
    ON […]
INNER JOIN Table4 d 
    ON […]
LEFT JOIN ( SELECT column1 , COUNT(column1) N
            FROM Table5 
            GROUP BY column1) e 
    ON e.column1=a.column1
WHERE a.column2 IS NULL
AND (e.N<3 OR e.column1 IS NULL)
于 2013-03-25T19:59:50.983 に答える