在Union中使用where子句

时间:2016-01-29 04:34:56

标签: 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,'aaa')和(2,'bbb1')那么新表应该有(2 ,'bbb')和(2,'bbb1')

但是,这似乎不起作用。请让我知道我哪里出错了,正确的做法是什么。

3 个答案:

答案 0 :(得分:4)

event.charCode不会比较数据。您需要event.which这里

Union

答案 1 :(得分:2)

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

您可能要做的是查找id的记录,t2匹配JOIN的记录,但描述不同。这可以通过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与UNION ALL记录匹配的记录将最终出现在同一行的联合数据中,这样您就可以对不等式的描述进行比较。

  

我希望两个行都被选中,描述不相等

您可以在通过join获得的两组行之间使用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 ,表格可以切换位置,如下所示:

MKPointAnnotation()

答案 2 :(得分:1)

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

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

因此,如果它具有相同数量的列和相同的数据类型,则使用Union,否则仅使用join。可以使用。

{{1}}