以下查詢是正確的。它返回行paul
和rick
,因爲它們對子行的評分最高。以下鏈接解決了這個問題。我無法理解查詢。我理解加入,我不明白的是t2.rating is null
?WHERE子句爲空?不明白
http://sqlfiddle.com/#!2/97e60/2
select t1.* from mytable t1
left join mytable t2
on t1.parentid = t2.parentid and t1.rating < t2.rating
join mytable parents
on parents.id = t1.parentid
where t2.rating is null AND parents.name like '%mike%'
t1.rating < t2.rating
獲得最高額定值爲子行,我知道t2.rating is null
意味着t2.rating是假的,但我不知道它是什麼在查詢幹什麼?我刪除了它,並添加了其他結果。那麼它究竟做了什麼來消除不正確的結果呢?
Thanks謝謝你的幫助...所以t2.rating爲null消除了t2和t1.rating中的行
user892134
2012-03-02 21:44:58
這似乎與OP的說法不一致:_「下面的查詢是正確的,它返回行'paul'和'rick' ...」_。 – 2012-03-02 21:45:33
這個答案是錯誤的。 WHERE子句在應用LEFT JOIN之後應用。我認爲在原始表中有0行,評級= NULL。 WHERE子句只保留ON子句永遠不能匹配的左側的行 – 2012-03-02 22:35:17