1

好的。我在一个表中有一些数据,在多个场合引用了另一个表中的一些数据。

表 1 - 主客户表 表 2 - 用户定义字段

假设我有一个查询,显示来自 Table1 的客户端 ID 以及来自 Table2 的所有附加/使用的“使用的定义字段”

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,但前提是不存在等于 '194' 的 t2.udf 值。所以,我会简单地得到

ID           
1234.9876    

...因此。

4

4 回答 4

5

Make the join a LEFT join and filer where t2.Index is 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

Another way by using 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'  

See also JOINS

于 2013-03-25T20:24:16.897 回答
0

您可以添加 AND t2.udf not in (select udf from table2 where udf <> '194')。但是@SQLMenace 解决方案更好

于 2013-03-25T20:26:26.953 回答
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

Select DISTINCT 为您提供满足其他条件的唯一条目,以及第一个 where 子句

  t2.UDF NOT IN (194)

Normall 将返回 t2.UDF 不是 194 的 t1 的所有行,但它受 Select Distinct 限制,只能为您提供不同的 id

于 2013-03-25T20:26:57.767 回答
-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'
于 2013-03-25T20:27:39.600 回答