在两个表

时间:2017-05-10 17:36:24

标签: sql

我有两个表具有相同的列。我想获取两个表中值不同的列。如何实现这一点?请帮助。我卡住了。

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

3 个答案:

答案 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