我正在尝试用新标准重写旧连接语法。
SELECT count(*)
FROM es_dbo.tablTypes t
,es_dbo.tablReg r
,es_dbo.tabl_PRGandCLI p
WHERE t.ClientType *= r.ClientType
AND p.ID IN (
SELECT DISTINCT ClientID
FROM esinet_dbo.tablReG
)
AND t.ClientType IN (@intClientType)
这是我正在尝试的。
SELECT count(*)
FROM es_dbo.tablTypes t
LEFT JOIN es_dbo.tablReg r ON t.ClientType = r.ClientType
LEFT JOIN es_dbo.tabl_PRGandCLI p ON p.ID IN (
SELECT DISTINCT ClientID
FROM es_dbo.tablReG
)
我在查询的第二部分中使用LEFT JOIN或INNER JOIN是否记录相同的记录。任何人都可以解释
答案 0 :(得分:0)
尝试以下方法:
SELECT count(*)
FROM es_dbo.tablTypes t
left join es_dbo.tablReg r on t.ClientType = r.ClientType
WHERE t.ClientType IN (@intClientType)
EXISTS (SELECT 1 FROM esinet_dbo.tablReG p WHERE r.ClientID = p.ID)
1)我假设@intClientType是一个标量值,所以不需要IN
2)检查存在时删除了DISTINCT和子查询。 EXISTS应该更快,因为它涉及找到第一个元素,而不是为DISTINCT做一些排序。
根据{{3}}的讨论,3)* =被LEFT JOIN取代。
答案 1 :(得分:0)
根据查询,它既不是内连接也不是左连接,它似乎是交叉连接,因此您可以使用以下查询:
SELECT count(*)
FROM es_dbo.tablTypes t
LEFT JOIN es_dbo.tablReg r ON t.ClientType = r.ClientType,
es_dbo.tabl_PRGandCLI p WHERE p.ID IN (
SELECT DISTINCT ClientID
FROM es_dbo.tablReG
)