0

ユーザーテーブルで各性別の最高の人物をフィルタリングしたいのですが、これは正常に機能するコードです。

SELECT s1.name, s1.sex, s1.height 
FROM user s1 
LEFT JOIN user s2 ON s1.sex =s2.sex AND s1.height < s2.height 
WHERE s2.name IS NULL;

しかし、これは機能しません:

SELECT s1.name, s1.sex, s1.height 
FROM user s1 
LEFT JOIN user s2 ON s1.sex =s2.sex AND s1.height < s2.height AND s2.name IS NULL;

つまり、「is null」は、「where」句の後にのみ使用できますか?

4

2 に答える 2

3

user最初のバージョンでは、テーブルに一致する行がないレコードが除外されています。これらは、null結合時に値を持ちます。

name2番目のバージョンは、列の値がであるレコードのフィルタリングですnull

于 2013-03-01T17:48:30.617 に答える
2

いいえ。

2番目のクエリを見てください。まだ行を結合しているため、s2.nameまだNULLです。したがって、列の結果の値は、結合されたときnullまたはnull not結合された後に評価でき、where句でフィルタリングできます。

于 2013-03-01T17:49:04.877 に答える