我有以下的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