我很难理解以下代码:
SELECT
productCode, productName, buyPrice
FROM
products a
WHERE
1 =
(
SELECT COUNT(productCode)
FROM products b
WHERE b.buyPrice > a.buyPrice
);
特别是这一部分:
WHERE
1 =
(
SELECT COUNT(productCode)
FROM products b
WHERE b.buyPrice > a.buyPrice # descending order
);
问题:1。语句中的选择过程是什么?2.怎样 WHERE b.buyPrice > a.buyPrice
匹配行 b.buyPrice
反对 a.buyPrice
? 3. WHERE 1 = (SELECT...
这是什么意思 1
在这一点上?
2条答案
按热度按时间yzuktlbb1#
该查询将为您提供价格第二高的产品,包括领带。
相关子查询统计同一个表中有多少行的价格高于当前行的价格(需要为1)。
如果不涉及任何关系,您可以使用行限制查询来表达:
但这不能很好地处理关系。还要注意的是,查询并没有正确地管理最高限价:如果有多个产品的最高限价,则查询结果为空,这可能不是您想要的结果。
在支持窗口函数的mysql 8.0中,使用
dense_rank()
:dkqlctbz2#
句子中的“谓语”
WHERE
对于表中第二贵的产品,子句的计算结果为真。它使用一个“相关子查询”,对于每一行,找到比当前行更贵的所有产品,然后对它们进行计数;这就是相关子查询的工作方式。 predicate 验证此计数是否完全正确
1
.如果您注意到该表被使用了两次,但是使用了不同的别名
a
以及b
以准确参考比较结果。