我有一個SQL Server查詢,它試圖連接3個表。我得到我需要的結果,但有重複問題。INNER JOIN + JOIN返回複製結果
table1
是主要記錄表。 table2
基本上是一個用戶表。 table3
是一個查詢表,將用戶連接到管理員。
我需要將一個用戶連接到連接到他自己和連接到他的經理(或他管理的人,如果是經理)的任何其他用戶的所有記錄。所有經理都是用戶,任何用戶都可以在table1
上擁有一個記錄。
table3
將table2
上的用戶標識連接到table2
上的管理員用戶標識。
table3 (lookup table)
id | altID
15 | 205
16 | 205
17 | 205
18 | 246
table2 (user table)
id | other_col
15 | abc
16 | def
17 | ggg
18 | hhh
205| yyy
246| zzz
table1 (record table)
id | record_data
15 | abc
16 | def
17 | ggg
18 | hhh
205| yyy
246| zzz
用戶將放入他們的ID。所以如果id ='XYZ'。
SELECT c.id, c.col, s.col2, s.col3
FROM table1 AS c
INNER JOIN table2 AS s
ON c.id = s.id
JOIN table3 AS p
ON c.id = p.id OR c.id = p.altID
WHERE
(p.id = 'XYZ'
OR p.altID = 'XYZ')
AND
(c.id = p.altID
OR c.id = p.id)
AND
NULLIF(LTRIM(RTRIM(c.column)), '') IS NOT null
這是給我所有相關的記錄(所有與XYZ有關的用戶)。但是,它包括兩次XYZ,我不知道爲什麼。
這是在SELECT
聲明中使用DISTINCT(c.id)
可解析的,但我試圖理解爲什麼複製是從頭開始的。
第一:INNER JOIN和JOIN是同義詞。第二:你的意思是「所以如果id ='XYZ'。」 - table3沒有值'XYZ'。第三:如果你的意思是(15,16,17,18,205,246)中的'XYZ'值 - 你有205的雙打是絕對正常的。 – Ingaz