cor*_*ori 3 sql t-sql sql-server derived-table
我认为这是一种SQL新手问题,但这里有.
我有一个基于示例用户定义函数放在一起的SQL查询(SQL Server 2005):
SELECT
CASEID,
GetNoteText(CASEID)
FROM
(
SELECT
CASEID
FROM
ATTACHMENTS
GROUP BY
CASEID
) i
GO
Run Code Online (Sandbox Code Playgroud)
UDF工作得很好(它连接相关表中多行的数据,如果这很重要)但我对FROM子句后的"i"感到困惑.查询在i中工作正常,但没有它就失败了."我"有什么意义?
编辑:正如乔尔在下面提到的,它不是一个关键词
Joe*_*orn 16
在FROM子句中使用子查询时,需要为查询指定名称.由于名称对您来说并不重要,因此通常会选择像"我"或"a"这样简单的名称.但你可以把任何名字放在你想要的地方 - 对于'我'本身没有任何意义,它肯定不是一个关键词.
如果您有一个非常复杂的查询,则可能需要将子查询与其他查询或表连接.在这种情况下,名称变得更加重要,你应该选择更有意义的东西.
我命名(子查询),这是必需的,并且还需要进一步的连接.
当连接表之间存在冲突的列名时,您必须使用子查询名称为外部查询中的列添加前缀,例如:
SELECT
c.CASEID, c.CASE_NAME,
a.COUNT AS ATTACHMENTSCOUNT, o.COUNT as OTHERCOUNT,
dbo.GetNoteText(c.CASEID)
FROM CASES c
LEFT OUTER JOIN
(
SELECT
CASEID, COUNT(*) AS COUNT
FROM
ATTACHMENTS
GROUP BY
CASEID
) a
ON a.CASEID = c.CASEID
LEFT OUTER JOIN
(
SELECT
CASEID, COUNT(*) AS COUNT
FROM
OTHER
GROUP BY
CASEID
) o
ON o.CASEID = c.CASEID
Run Code Online (Sandbox Code Playgroud)