多年来,我一直在各种DBMS(如Oracle、SQL Server、MySQL、Access等)上编写SQL,其中一个问题总是让我感到困惑,那就是似乎缺乏针对表格和子查询别名的命名约定。
我经常听说使用表格别名是正确的做法,尽管我并不总是使用它们,但当我使用时,我总是为使用什么名称而犯愁。我曾经使用过描述性的名称,也用过单个字符,例如“t”、“s”或“q”,然后又改回去了。例如,我刚刚写的这个MS Access查询,即使是这样相对简单的查询,我仍然不满意我使用的别名,我仍然认为它不太容易阅读。
你认为怎么样?我觉得抛出这个问题,看看其他人对此的感受。
我经常听说使用表格别名是正确的做法,尽管我并不总是使用它们,但当我使用时,我总是为使用什么名称而犯愁。我曾经使用过描述性的名称,也用过单个字符,例如“t”、“s”或“q”,然后又改回去了。例如,我刚刚写的这个MS Access查询,即使是这样相对简单的查询,我仍然不满意我使用的别名,我仍然认为它不太容易阅读。
SELECT stkTrans.StockName
, stkTrans.Sedol
, stkTrans.BookCode
, SUM(IIF(stkTrans.TransactionType="S", -1 * stkTrans.Units, 0)) AS [Sell Shares]
, SUM(IIF(stkTrans.TransactionType="B", stkTrans.Units, 0)) AS [Buy Shares]
, SUM(IIF(stkTrans.TransactionType="B", -1 * stkTrans.Price, 0) * stkTrans1.Min_Units) + SUM(IIF(stkTrans.TransactionType="S", stkTrans.Price, 0) * stkTrans1.Min_Units) AS [PnL]
, "" AS [Comment]
FROM tblStockTransactions AS stkTrans
INNER JOIN (SELECT sT1.BookCode
, sT1.Sedol
, MIN(sT1.Units) AS [Min_Units]
FROM tblStockTransactions sT1
GROUP BY sT1.BookCode, sT1.Sedol
HAVING (SUM(IIF(sT1.TransactionType="S", 1, 0)) > 0
AND SUM(IIF(sT1.TransactionType="B", 1, 0)) > 0)) AS stkTrans1 ON (stkTrans.BookCode = stkTrans1.BookCode) AND (stkTrans.Sedol = stkTrans1.Sedol)
GROUP BY stkTrans.BookCode, stkTrans.StockName, stkTrans.Sedol;
你认为怎么样?我觉得抛出这个问题,看看其他人对此的感受。