我有一个如下查询。我担心的是,直到我在子查询之后放了一些东西,该查询才起作用。我从没在SQL中遇到过这样的事情。我的负责人要我在最后一个括弧后面加上一个变量,我担心为什么又好奇为什么要有一个变量。我使用的是SQL Server 2005。
SELECT COUNT(*)
FROM
(SELECT ID
FROM NAMES N
LEFT JOIN PEOPLE P ON N.ID = P.ID
WHERE P.NAME = @name
GROUP BY ID)
下面的这个作品就像一个护身符。我不明白为什么要在括号后面放些东西。
SELECT COUNT(*)
FROM
(SELECT ID
FROM NAMES N
LEFT JOIN PEOPLE P ON N.ID = P.ID
WHERE P.NAME = @name
GROUP BY ID) Temp
答案 0 :(得分:0)
为子查询输入别名 似乎不太有用(甚至对我而言),但是SQL标准说应该有一个别名。确实,没有其他原因。
话虽这么说,您要执行以下一项操作吗?
SELECT ID, COUNT(*)
FROM NAMES N LEFT JOIN PEOPLE P
ON N.ID = P.ID
WHERE P.NAME = @name
GROUP BY ID
或
SELECT COUNT(*)
FROM NAMES N LEFT JOIN PEOPLE P
ON N.ID = P.ID
WHERE P.NAME = @name
编辑:看到您的评论并提到@GordonLinoff,您也可以尝试以下查询;没有加入。
SELECT COUNT(*)
FROM PEOPLE
WHERE NAME = @name
请注意,如果Names.id或People.id唯一,则其结果将仅相同。如果这两个字段都不是,则计数将不同。
答案 1 :(得分:0)
一种更简单的写法是
SELECT COUNT(DISTINCT P.ID)
FROM PEOPLE P
WHERE P.NAME = @name;
无论如何,LEFT JOIN
子句会将您的INNER JOIN
变成WHERE
(必须匹配)。然后,JOIN
是不必要的,因为您要计算用于ID
的{{1}}。您可以只计算JOIN
中的匹配ID。 PEOPLE
不能为ID
,因为它用于NULL
。
如果JOIN
在ID
中是唯一的,则:
PEOPLE