我不知道任何人可以告诉我这些查询是否等效?
SELECT
TOP 1 (XP.COL1 * XP.COL2)
FROM XP
INNER JOIN XZ
ON XZ = XP
WHERE XZ = 'ZORD'
ORDER BY XP DESC
和
SELECT
MAX(XP.COL1 * XP.COL2)
FROM
XP,
XZ
WHERE
XZ = XP
AND XZ = 'ZORD'
我不知道任何人可以告诉我这些查询是否等效?
SELECT
TOP 1 (XP.COL1 * XP.COL2)
FROM XP
INNER JOIN XZ
ON XZ = XP
WHERE XZ = 'ZORD'
ORDER BY XP DESC
和
SELECT
MAX(XP.COL1 * XP.COL2)
FROM
XP,
XZ
WHERE
XZ = XP
AND XZ = 'ZORD'
首先,您应该始终使用正确的JOIN
语法。 切勿在FROM
子句中使用逗号。
但是,这与您的问题无关。
您的查询不相同。特别是,MAX()
忽略NULL
值,而ORDER BY . . . DESC
将它们放在首位。
如果表达式XP.COL1 * XP.COL2
never NULL
,那么两者是等价的。但是,它们通常并不相同。
那应该工作
SELECT (XP.COL1*XP.COL2) as res
FROM XP INNER JOIN XZ ON XP.col=xz.col
Where XZ.cols='zord'
Order by XP.col DESC
FETCH FIRST 1 ROWS ONLY;
SELECT max(res)
FROM (SELECT (XP.COL1*XP.COL2) as res
FROM XP INNER JOIN XZ ON XP.col=xz.col
Where XZ.col='zord') ;