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';如果该行不在关键字的三个最高出价中。

这是有效的sqlfiddle,但我不明白它是如何工作的。更具体地说,我不理解3 <=这个特定的查询。

如何3 <=确定该行不在三个出价最高的关键字中?

4

2 回答 2

2

此查询的工作方式如下:

子查询

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

查找对同一关键字具有更高出价的行数。然后我们指定我们正在寻找的出价不能在前三个出价中,因此我们要求从该查询中返回至少 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 回答