SQL 查询在做什么?
What is this SQL query doing?
我希望这里有一个更笼统的语言问题,但整个查询感觉特别混乱。 :P 我从来没有见过一个 SQL 语句后跟一个逗号(而不是分号),然后是 而不是 另一个语句,也不是一个子查询它后面的附加 WHERE 子句。那么...wtf?
当我 运行 这个查询时,我得到一个包含两列的结果集:Address
和 Zip
。
这是 运行ning 针对 SQL 服务器 btw。
SELECT
[Address] AS [Address],
[AgencySitesV3].[Zip] AS [Zip]
FROM
[AgencySitesV3] WITH (NOLOCK)
INNER JOIN [Zip] WITH (NOLOCK) ON [AgencySitesV3].[Zip] = [sZipCode]
,(
SELECT gZipPoint
FROM [Zip] WITH (NOLOCK)
WHERE sZipCode = '30301'
) AS qryOrigin
WHERE
NULLIF([ActiveApp], '') IS NOT NULL
AND NULLIF([ActiveScheduling], '') IS NOT NULL
AND NULLIF([Adult], '') IS NOT NULL
编辑: 感谢所有提供的人 info/comments。很明显,这个查询使用了 SQL-89 连接语法,这就是我以前从未见过它的原因。 :P 然而,查询 also 使用现代连接,这使得它更奇怪。为了简洁起见,我删掉了很多内容,但我重新添加了一个连接,因为现在我不确定在替换 SQL 时对 ON
条件使用什么 - 89人加入。查看更新后的查询代码。
SELECT
[Address] AS [Address]
FROM
[AgencySitesV3] WITH (NOLOCK)
,(
SELECT gZipPoint
FROM [Zip] WITH (NOLOCK)
WHERE sZipCode = '30301'
) AS qryOrigin -- this is the table alias for
-- the derived table from the sub query
WHERE
NULLIF([ActiveApp], '') IS NOT NULL
AND NULLIF([ActiveScheduling], '') IS NOT NULL
AND NULLIF([Adult], '') IS NOT NULL
此查询使用旧式联接从地址列中获取笛卡尔积,派生 table 的输出。这意味着它正在获取两个输出的所有组合。它应该是一个 CROSS JOIN,但无论如何。
简而言之 - 它正在获取邮政编码 30301 的所有地址
我希望这里有一个更笼统的语言问题,但整个查询感觉特别混乱。 :P 我从来没有见过一个 SQL 语句后跟一个逗号(而不是分号),然后是 而不是 另一个语句,也不是一个子查询它后面的附加 WHERE 子句。那么...wtf?
当我 运行 这个查询时,我得到一个包含两列的结果集:Address
和 Zip
。
这是 运行ning 针对 SQL 服务器 btw。
SELECT
[Address] AS [Address],
[AgencySitesV3].[Zip] AS [Zip]
FROM
[AgencySitesV3] WITH (NOLOCK)
INNER JOIN [Zip] WITH (NOLOCK) ON [AgencySitesV3].[Zip] = [sZipCode]
,(
SELECT gZipPoint
FROM [Zip] WITH (NOLOCK)
WHERE sZipCode = '30301'
) AS qryOrigin
WHERE
NULLIF([ActiveApp], '') IS NOT NULL
AND NULLIF([ActiveScheduling], '') IS NOT NULL
AND NULLIF([Adult], '') IS NOT NULL
编辑: 感谢所有提供的人 info/comments。很明显,这个查询使用了 SQL-89 连接语法,这就是我以前从未见过它的原因。 :P 然而,查询 also 使用现代连接,这使得它更奇怪。为了简洁起见,我删掉了很多内容,但我重新添加了一个连接,因为现在我不确定在替换 SQL 时对 ON
条件使用什么 - 89人加入。查看更新后的查询代码。
SELECT
[Address] AS [Address]
FROM
[AgencySitesV3] WITH (NOLOCK)
,(
SELECT gZipPoint
FROM [Zip] WITH (NOLOCK)
WHERE sZipCode = '30301'
) AS qryOrigin -- this is the table alias for
-- the derived table from the sub query
WHERE
NULLIF([ActiveApp], '') IS NOT NULL
AND NULLIF([ActiveScheduling], '') IS NOT NULL
AND NULLIF([Adult], '') IS NOT NULL
此查询使用旧式联接从地址列中获取笛卡尔积,派生 table 的输出。这意味着它正在获取两个输出的所有组合。它应该是一个 CROSS JOIN,但无论如何。
简而言之 - 它正在获取邮政编码 30301 的所有地址