【发布时间】:2016-04-26 13:46:08
【问题描述】:
所以我通过抓取数据库 A 中的随机行并根据它们的关键列在数据库 B 中搜索这些行来比较两个 Oracle 数据库。然后我比较java中返回的行。
我正在使用以下查询使用数据库 A 中的键列在数据库 B 中查找行:
select * from mytable
Where (Key_Column_A,Key_Column_B,Key_Column_C)
in (('1','A', 'cat'),('2','B', 'dog'),('3','C', ''));
这对前两组键工作得很好,但是第三个键('3','C','')不起作用,因为第三列中有一个空值。将语句更改为 ('3','C', NULL) 或将 SQL 更改为
select * from mytable
Where (Key_Column_A,Key_Column_B,Key_Column_C)
in ((('1','A', 'cat'),('2','B', 'dog'),('3','C', ''))
OR (Key_Column_A,Key_Column_B,Key_Column_C) IS NULL);
也不行。
有没有办法在 IN 子句中包含一个空列?如果没有,有没有办法有效地做同样的事情? (我目前唯一的解决方案是创建一个检查以确保我的键中没有可以为空的列,这会使这个过程相当低效且有些混乱)。
【问题讨论】:
-
你是动态生成这个SELECT语句吗?
-
@BobJarvis 是的,我是。