sql - 将 where 子句与 Union 一起使用

标签 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')

但是,这似乎不起作用。请让我知道哪里出了问题以及正确的方法是什么。

最佳答案

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

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

关于sql - 将 where 子句与 Union 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35076958/

相关文章:

java - MySQL - Java 和 MySQL 过程和函数的集成问题

SQL查询以避免循环或游标来获取记录

mysql - 如何从保存日期大于另一个日期 + 1 周的数据库中获取数据

sql - 在oracle sql中连接没有外键关系的表并向结果添加一列?

java - 如何使用 JPA native 查询正确访问 where 子句内的 varray 列?

oracle - 将日期附加到字符串以获取 Oracle 中的表名称并对其进行选择查询

mysql - 安全执行用户提交的sql

sql - Postgres 字符串数组的唯一约束/索引

windows - SQL 加载程序 : writing batch file (windows) for processing multiple data file

php - 如何提高 PHP OCI-Lob::save 的性能