[英]Using same 'WHERE' clause for JOIN and UNION and subqueries
[英]using where clause with Union
我有两个表,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
UNION ALL
在查询的第一部分生成的行之后转储查询的第二部分的所有行。 你不能比较a
的字段b
的,因为它们属于不同的行。
什么你可能要做的是定位的记录t1
与id
S的匹配这些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
这样,具有与t2
记录匹配的ID的t1
记录将最终在同一行的连接数据上,允许您对不等式的描述进行比较。
我想要选择的两行是描述不相等
您可以在通过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否则仅加入可以使用。
SELECT *
FROM t1 AS a
inner join t2 AS b
on a.id =b.id
and a.desc != b.desc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.