1

このクエリを理解できません:

SELECT * 
  FROM `advertise` parent 
 WHERE 3  <= ( SELECT COUNT(username) 
                 FROM `advertise` 
                WHERE keyword = parent.keyword 
                  AND bid > parent.bid) 
   AND username = 'mike'

このクエリが行うことは、 username を含むすべての行を表示すること'mike'です。その行がキーワードの上位 3 つの入札単価に含まれていない場合。

これが機能するsqlfiddleですが、その仕組みがわかりません。3 <=より具体的には、この特定のクエリで は理解できません。

3 <=行がキーワードの上位 3 つの入札単価に含まれていないことを どのように判断しますか?

4

2 に答える 2

2

このクエリは次のように機能します。

サブクエリ

SELECT COUNT(username) FROM `advertise` WHERE keyword = parent.keyword AND bid > parent.bid

同じキーワードに対して入札単価が高い行の数を見つけます。次に、探している入札が上位 3 つの入札に含まれないように指定するため、そのクエリから少なくとも 3 つの入札が返される必要があります。エンドクエリは次のようになります。

SELECT * FROM `advertise` parent 
WHERE 3  <= ( SELECT COUNT(username) 
    FROM `advertise` 
    WHERE keyword = parent.keyword 
    AND bid > parent.bid) 
AND username = 'mike'
于 2012-06-08T14:21:26.553 に答える
1

少し再フォーマットすると、読みやすくなります。

SELECT * FROM `advertise` parent 

WHERE (SELECT COUNT(username) 
   FROM `advertise` 
   WHERE keyword=parent.keyword 
   AND bid>parent.bid) >= 3 

AND username='mike'

サブクエリは、親クエリから返された行ごとに評価されるため、行ごとに実行されますX >= 3

于 2012-06-08T14:21:25.640 に答える