1 t-sql join left-join outer-join sql-server-2008
好.我在一个表中有一些数据,它多次引用另一个表中的一些数据.
表1 - 主客户表Table2 - 用户定义的字段
假设我有一个查询,显示Table1中的客户端ID以及表2中所有附加/使用的"使用的已定义字段"
SELECT t1.Id, t2.udf
FROM Table1 t1
JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t1.EndDate IS NULL AND
t1.Id = '1234.9876' AND
Run Code Online (Sandbox Code Playgroud)
我会得到以下结果......
ID UDF
1234.9876 100
1234.9876 110
1234.9876 118
1234.9876 124
1234.9876 198
1234.9876 256
Run Code Online (Sandbox Code Playgroud)
现在,假设我想查询同样的事情,并且只获取客户端的ID,但仅限于t2.udf等于'194'的值不存在.所以,我只是得到
ID
1234.9876
Run Code Online (Sandbox Code Playgroud)
...结果是.
使连接成为LEFT连接和文件管理器,其中t2.Index为null
SELECT t1.Id
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.Id = t2.Index
AND t2.UDF = 194 -- has to be before where clause
WHERE t2.Index IS NULL
AND t1.EndDate IS NULL
AND t1.Id = '1234.9876' -- not sure if you want this part
Run Code Online (Sandbox Code Playgroud)
另一种使用NOT EXISTS的方法
SELECT t1.Id
FROM Table1 t1
WHERE NOT EXISTS (SELECT 1 FROM Table2 t2 WHERE t1.Id = t2.INDEX
AND t2.UDF = 194)
AND t1.EndDate IS NULL
AND t1.Id = '1234.9876'
Run Code Online (Sandbox Code Playgroud)
另见JOINS