我有两个表具有相同的列。我想获取两个表中值不同的列。如何实现这一点?请帮助。我卡住了。
imageid是两个表中的主键。第一个表中存在的imageid不一定存在 在第二桌上。
第一张表:
imageid name id
1 priya 001
2 neha 002
3 divya 003
4 santo 004
第二张表:
imageid name id
1 priy 001
2 neha 003
4 santo 004
结果
imageid firstdata seconddata columnname
1 priy priya name
2 002 003 id
答案 0 :(得分:2)
假设您没有重复项,那么您可以使用inner join
基本union all
执行此操作:
select t1.imageid, t1.name as firstdata, t2.name as seconddata, 'name' as colname
from t1 join
t2
on t1.imageid = t2.imageid
where t1.name <> t2.name
union all
select t1.imageid, t1.id as firstdata, t2.id as seconddata, 'id'
from t1 join
t2
on t1.imageid = t2.imageid
where t1.id <> t2.id;
根据类型和数据库的不同,您可能需要将ID强制转换为字符串。
答案 1 :(得分:2)
几年前我在AskTom.com上找到了以下方法,从那以后一直把它作为代码模板。我发现它的速度相当快,我经常使用它。
div.row
div.col-sm-2 //sidebar
div.col-sm-10 //content
div.row
div.col-sm-6 //content cell
div.col-sm-6 //content cell
div.row
div.col-sm-6 //content cell
div.col-sm-6 //content cell
... ...
前两列(计数)表示在该表中找到的记录数,可以识别表中有多个匹配记录的行。
我还使用它来比较非常复杂的查询,将它们放在WITH子句中,因此主查询更容易阅读。
例如:
SELECT COUNT(src1) AS in_first_table, COUNT(src2) AS in_second_table, imageid, name, id
FROM (SELECT imageid, name, id,
1 AS src1,
to_number(NULL) AS src2
FROM first_table
UNION ALL
SELECT imageid, name, id,
to_number(NULL) AS src1,
2 AS src2
FROM second_table
)
GROUP BY imageid, name, id
HAVING COUNT(src1) <> COUNT(src2)
ORDER BY 3, 1 DESC;
答案 2 :(得分:1)
UNION将返回结果的唯一记录。如果指定ALL(UNION ALL)将在结果集上保留重复项。
SELECT column1 column2 FROM first_table
UNION
SELECT column1 column2 FROM second_table