Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将where子句与Union一起使用_Sql_Oracle - Fatal编程技术网

Sql 将where子句与Union一起使用

Sql 将where子句与Union一起使用,sql,oracle,Sql,Oracle,我有两个表,t1和t2,它们有相同的列(id,desc)和数据。但是其中一列desc对于同一主键id可能具有不同的数据 我想从这两个表中选择所有这些行,以便t1.desc!=t2.desc select a.id, b.desc FROM (SELECT * FROM t1 AS a UNION ALL SELECT * FROM t2 AS b) WHERE a.desc != b.desc 例如,如果t1有(1,'aaa')和(2,'bbb'),t2有(1,'a

我有两个表,t1和t2,它们有相同的列(id,desc)和数据。但是其中一列desc对于同一主键id可能具有不同的数据

我想从这两个表中选择所有这些行,以便t1.desc!=t2.desc

select a.id, b.desc 
FROM (SELECT * FROM t1 AS a
      UNION ALL 
      SELECT * FROM t2 AS b)
WHERE a.desc != b.desc
例如,如果t1有(1,'aaa')和(2,'bbb'),t2有(1,'aaa')和(2,'bbb1'),那么新表应该有(2,'bbb')和(2,'bbb1'))


然而,这似乎不起作用。请告诉我哪里出了问题,正确的方法是什么。

Union
不会比较数据。您需要在此处加入

SELECT * 
FROM t1 AS a 
inner join  t2 AS b
on a.id =b.id 
and a.desc != b.desc

UNION ALL
在查询第一部分生成的行之后转储查询第二部分的所有行。不能将
a
的字段与
b
的字段进行比较,因为它们属于不同的行

您可能正在尝试查找
t1
的记录,其中
id
s与
t2
的记录匹配,但描述不同。这可以通过加入
来实现:

SELECT a.id, b.desc
FROM t1 AS a
JOIN t2 AS b ON a.id = b.id
WHERE a.desc != b.desc
通过这种方式,
t1
的记录与
t2
的ID匹配,将在连接数据的同一行上结束,从而允许您对不等式的描述进行比较

如果描述不相等,我希望选择两行

您可以在通过join获得的两组行之间使用
UNION ALL
,并使用表交换位置,如下所示:

SELECT a.id, b.desc -- t1 is a, t2 is b
FROM t1 AS a
JOIN t2 AS b ON a.id = b.id
WHERE a.desc != b.desc
    UNION ALL
SELECT a.id, b.desc -- t1 is b, t2 is a
FROM t2 AS a
JOIN t1 AS b ON a.id = b.id
WHERE a.desc != b.desc

UNION运算符用于组合两个或多个SELECT语句的结果集

请注意,UNION中的每个SELECT语句必须具有相同的列数。列还必须具有类似的数据类型

所以,如果它具有相同的列数和相同的数据类型,则可以使用Union,否则只能使用join

SELECT * 
FROM t1 AS a 
inner join  t2 AS b
on a.id =b.id 
and a.desc != b.desc

您的RDBMs是什么?请用查询代码而不是图片编辑您的问题。如果您不知道如何设置格式,只需在代码前后各留出一行空白,每行前留出4个空格或制表符。谢谢您的回答。但是如果描述不相等,我希望选择这两行。也就是说,新表应该包含t1和t2中描述不同的所有行。例如,如果t1有(1,'aaa')和(2,'bbb'),t2有(1,'aaa')和(2,'bbb1'),那么新表应该有(2,'bbb')和(2,'bbb1')。再次感谢,谢谢。我会试试的。谢谢你的澄清。