确定。我在一个表中有一些数据,它多次引用另一个表中的一些数据。
表1 - 主客户端表 表2 - 用户定义的字段
假设我有一个查询,显示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
我会得到以下结果......
ID UDF
1234.9876 100
1234.9876 110
1234.9876 118
1234.9876 124
1234.9876 198
1234.9876 256
现在,我想要查询同样的事情,并且只获取客户端的ID,但只有在t2.udf等于'194'的值不存在时才会出现。所以,我只想得到
ID
1234.9876
......结果。
答案 0 :(得分:5)
使连接成为LEFT连接和文件管理器,其中t2.Index为空
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
使用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'
另见JOINS
答案 1 :(得分:0)
您可以添加AND t2.udf(从表2中选择udf,其中udf<>'194')。 但@SQLMenace解决方案更好
答案 2 :(得分:0)
这应该这样做。
SELECT DISTINCT t1.Id
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t2.UDF NOT IN (194)
AND t2.Index IS NULL
选择DISTINCT为您提供满足其他条件的唯一条目,以及第一个where子句
t2.UDF NOT IN (194)
Normall会返回t2.UTF不是194的t1的所有行,但是它受Select Distinct的限制只能为你提供不同的id
答案 3 :(得分:-1)
尝试以下方法:
SELECT t1.Id
FROM Table1 t1
JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t1.EndDate IS NULL AND
t1.Id = '1234.9876' AND
t2.udf <> '194'