我有以下的SQL語法。這工作正常,但我想知道是否有一種方法來寫這個語法更簡單,因爲MAX(ra0.DescPriority)使用相同的表連接。更簡單的SQL語法?哪個更好的語法?
SELECT DISTINCT Items_1.ImageID, Items_1.SubcategoryID2, Items_1.AddDate,
(SELECT MAX(ra0.DescPriority) AS Expr1
FROM Items INNER JOIN
Attribs AS ra0 ON Items.ImageID = ra0.ImageID) AS Pri
FROM Items AS Items_1 INNER JOIN
Attribs AS ra0 ON Items_1.ImageID = ra0.ImageID LEFT OUTER JOIN
v_DisplayStockPrice AS v_DisplayStockPrice_1 ON Items_1.ImageID = v_DisplayStockPrice_1.ImageID INNER JOIN
Attribs AS ra1 ON ra0.ImageID = ra1.ImageID
WHERE (Items_1.deleted NOT IN (1, 2)) AND (Items_1.SubcategoryID2 = 'ORD')
ORDER BY Pri, Items_1.AddDate DESC
所以我想出了這個語法。
SELECT DISTINCT Items_1.ImageID, Items_1.SubcategoryID2, Items_1.AddDate, MAX(ra0.DescPriority) AS Pri
FROM Items AS Items_1 INNER JOIN
Attribs AS ra0 ON Items_1.ImageID = ra0.ImageID LEFT OUTER JOIN
v_DisplayStockPrice AS v_DisplayStockPrice_1 ON Items_1.ImageID = v_DisplayStockPrice_1.ImageID INNER JOIN
Attribs AS ra1 ON ra0.ImageID = ra1.ImageID
WHERE (Items_1.deleted NOT IN (1, 2)) AND (Items_1.SubcategoryID2 = 'ORD')
GROUP BY Items_1.ImageID, Items_1.SubcategoryID2, Items_1.AddDate
ORDER BY Pri, Items_1.AddDate DESC
哪種SQL語法更好?或者有更好的方法來寫這個查詢?
如果您可以將您的示例歸結爲您所詢問的基本差異,那麼您會得到更好的答案。 – harpo 2012-01-18 02:34:01
很難理解在from子句中有混合連接的查詢,以及select子句中的子查詢(它們只是連接的一種替代形式)。你應該如何表達你的連接是一致的。如果沒有詳細研究你的SQL,我寧願你的第二個語法示例,因爲所有連接都以相同的方式表示。 – 2012-01-18 04:47:47