我正在试图弄清楚如何解决这个问题。
我有一个包含多列的表格。这些列中有两个:colA和colB。
行中colA和colB中的值将匹配同一个表中的不同行,但这些列中的实际值将不相等。
所以对于任何一行:
Col_A | Col_B
val1.0 | val2.0
会有另一行
Col_A | Col_B
val1.1| val2.1
有一个异常,这个相应的行不存在,我需要选择这一行。
非常感谢任何有关此问题的帮助。
我一直在处理此类型的查询
Select *
from table1 e
where (e.Col_A = val1.0 and e.Col_B = val2.0)
and (e.Col_A != val1.1 and e.Col_B ! = val2.1)
这是否接近?在我写这篇文章时,如果一个条款为真,那么另一条也必须是真的。
提前感谢任何帮助或提示。
有关要求澄清的其他信息。
我正在做的是更新表格。该表有一个列,用于捕获和标记上述规则的任何例外情况。
该表有大约12列,其中两列可以有两个可能的值之一。这两列的值类型是varchar2(30)通常,对于具有一组值的任何行,将有另一行具有其他值。一些其他不相关的列可以是相同的但不一定。
我实现的代码与下面的代码类似,基于KAJ的左连接建议。但是,它似乎在直接查询中返回太多行,并且在更新中它实际上更新了每一行。
Update TableA Set Col_Ex = ('Exception')
Where Exists
(Select ... Example from Kaj s suggestion below);
答案 0 :(得分:4)
假设如下:
1.值是固定的(即1.0到1.1和2.0到2.1)
2.您要查找的是相应行不存在的原始行
3.原始行和相应行之间的连接位于您未提及的列中(我在下面将其称为键)
......那么类似下面的东西应该有效:
select original.*
from table original
left outer join table corresponding on corresponding.key = original.key and corresponding.Col_A = 'val1.1' and corresponding.Col_B = 'val2.1'
where original.Col_A = 'val1.0'
and original.Col_B = 'val2.0'
and corresponding.key is null
答案 1 :(得分:2)
Select e.* from table e
where (e.Col_A = val1.0 and e.Col_B = val2.0)
and NOT EXISTS(SELECT * FROM table e2
WHERE e2.Col_A = val1.1
and e2.Col_B = val2.1 AND e2.key = e.key)
答案 2 :(得分:1)
我假设您的值1.0和1.1只是众多的一个例子。否则,将不会有多个记录要查找。你在寻找A2 =(A1 + 0.1)的值吗?如果是这样,你可以使用这样的东西:
select t1.col_a, t1.col_b
from table t1
left join table t2 on
(t2.col_a = t1.col_a + 0.1 and t2.col_b = t1.col_b + 0.1)
where
t2.col_a is null and t2.col_b is null
当没有符合连接条件的记录时,LEFT JOIN将返回空值。