此查询选择一个列表,其中包含供应商提供的最昂贵物品的名称和价格,包括提供商名称。
表格只是:
供应商:代码(PK) - 名称
文章:代码(PK) - 名称 - 价格 - 供应商(FK)
查询是:
SELECT A.NAME, A.PRICE, S.NAME FROM ARTICLES A, SUPPLIERS S
WHERE A.SUPPLIER = S.CODE
AND A.PRICE =
(
SELECT MAX(A.PRICE)
FROM ARTICLES A
WHERE A.SUPPLIER = S.CODE
)
请您帮我理解背后的逻辑吗?为什么这给了我每供应商的最高价格?
谢谢!
答案 0 :(得分:1)
您的内部查询正在获取文章子集的最高价格 - 那些与从外部查询传入的supplier.code匹配的文章。所以内部查询说,“给我供应商X的最高价格。”
外部查询过滤联接列表,仅提供那些与内部查询结果匹配的记录 - 恰好等于最高价格的记录。如果多个记录等于供应商的最高价格,它将匹配外部列表中的多个记录。