1

私は現在、次のステートメントを機能させようとしています。

SELECT t1.id, t1.row2
FROM table1 t1
JOIN table2 t2 ON t1.rowx = t2.rowx
JOIN table3 t3 ON t2.rowy = t3.rowy
GROUP BY t1.row2
HAVING COUNT(t2.rowx) < t3.maximum_size

ステートメントは機能し、出力を提供しますが、多くのt3.maximum_sizeフィールドがNULL原因で、ステートメントが希望どおりに機能しなくなります。

値を含むCOUNT(*)<を設定する方法はありますか?another_numberNULL

例:

10 < 20 // true
20 < 20 // false
18 < null // true (as null represents no maximum size in my query)

(この問題に関連する他のSOの質問を確認しましたが、この特定のタスクを支援する質問は見ていません。見逃した場合は、正しい方向に向けてください。)

4

3 に答える 3

2

having 句を次のように変更します。

Having count(t2.rowx) < t3.maximum_size or t3.maximum_size is null

振り返ってみると、より良い SQL の答えは次のとおりです。

Having count(t2.rowx) < max(t3.maximum_size) or max(t3.maximum_size) is null

元の構文は mysql では機能しますが、ほとんどのデータベースでは機能しません。また、私はそれが悪いSQLだと考えています。「t3.maximum_size」の使用は、集約コンテキストで参照される場合、「t3.Maximum_Size の任意の値」と実際に同等です。明示する方がはるかに優れています。

于 2012-05-12T03:10:16.410 に答える
1

NVLを使用できるかもしれません


HAVING COUNT(t2.rowx) < NVL(t3.maximum_size, 0)

これは、t3.maximum_sizeがNUllとして返される場合、マッチングはZEROで行われることを意味します。

それが役に立てば幸い

于 2012-05-12T04:30:04.107 に答える
1

t3.maximum_size同様に集約する必要があると思います:

HAVING COUNT(t2.rowx) < MAX(t3.maximum_size)
于 2012-05-12T03:13:48.857 に答える