我无法理解此查询:
SELECT *
FROM `advertise` parent
WHERE 3 <= ( SELECT COUNT(username)
FROM `advertise`
WHERE keyword = parent.keyword
AND bid > parent.bid)
AND username = 'mike'
此查询的作用是显示用户名为'mike'
的所有行;如果该行不在关键字的三个最高出价中。
以下是sqlfiddle that works,但我不明白它是如何运作的。更具体地说,我不了解3 <=
这个特定的查询。
3 <=
如何确定该行不在关键字的三个最高出价中?
答案 0 :(得分: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'
答案 1 :(得分: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
。