別のSQLチュートリアルの質問:フィールド> 0?
質問
さて、これ(3a;回答が提供されているサンプル問題)で頭を悩ませる:
bbc(名前、地域、地域、人口、gdp)
3a。各地域で最大の国を見つける:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population > 0)
テーブルエントリをループし、各x.regionを現在のデータベースエンジンと一致させるdbエンジンの観点から考えると、「 WHERE y.region = x.region
」の概念を理解していますy.region(ネストされたSELECT内)...しかし、wtfは「 AND母集団> 0
'しますか?それなしでは正しい答えではありませんが、どうしてそうなのかわかりません...
解決
この句が存在するのは、人口列にNULLを含むエントリがヨーロッパテーブル(バチカンの場合)にあるからです。以下も機能し、より理解しやすいと思います:
SELECT region, name, population
FROM bbc x
WHERE population >= ALL
(SELECT population
FROM bbc y
WHERE y.region = x.region
AND population IS NOT NULL)
すべてのサブクエリのMySQLドキュメント 、役立つコメントがあります(彼らのコメントを強調):
一般に、 NULL 値を含むテーブルと空のテーブルは「エッジケース」です。サブクエリコードを記述するときは、これら2つの可能性を考慮したかどうかを常に考慮してください。
他のヒント
ここで推測しています。
特定の地域のすべてのレコードの人口がnullの場合はどうなりますか?
編集:人口の-ve値を無視することは一種のセーフティネットと考えることができます(実際のシナリオではありません)。
所属していません StackOverflow