Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在两个表中查找值不同的列_Sql - Fatal编程技术网

Sql 在两个表中查找值不同的列

Sql 在两个表中查找值不同的列,sql,Sql,我有两个表具有相同的列。我想获取两个表中值不同的列。我如何实现这一点?请帮助。我卡住了 imageid是两个表中的主键。第一个表中的imageid不一定存在 在第二张桌子上 第一张表: imageid name id 1 priya 001 2 neha 002 3 divya 003 4 santo 004 第二张表: imageid name

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

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

假设没有重复项,则可以使用union all进行基本内部联接:


根据类型和数据库的不同,您可能需要将ID强制转换为字符串。

如果没有重复项,则可以使用基本的内部联接和union all执行此操作:


根据类型和数据库,您可能需要将ID强制转换为字符串。

多年前我在AskTom.com上找到了以下方法,并一直将其作为代码模板保存。我发现它相当快,而且我经常使用它

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;
前两列计数表示在该表中找到多少条记录,这可以标识表中有多条匹配记录的行

我还使用它来比较非常复杂的查询,将它们放在WITH子句中,这样主查询更容易阅读

例如:

WITH first_t AS
 (SELECT imageid, NAME, id
    FROM first_table),
second_t AS
 (SELECT imageid, NAME, id
    FROM second_table)
SELECT COUNT(src1) AS in_first_table,
       COUNT(src2) AS in_second_table,
       imageid, NAME, id
  FROM (SELECT first_t.*,
               1 AS src1,
               to_number(NULL) AS src2
          FROM first_t
        UNION ALL
        SELECT second_t.*,
               to_number(NULL) AS src1,
               2 AS src2
          FROM second_t)
 GROUP BY imageid,
          NAME,
          id
HAVING COUNT (src1) <> COUNT (src2)

几年前,我在AskTom.com上发现了以下方法,并将其作为代码模板保留至今。我发现它相当快,而且我经常使用它

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;
前两列计数表示在该表中找到多少条记录,这可以标识表中有多条匹配记录的行

我还使用它来比较非常复杂的查询,将它们放在WITH子句中,这样主查询更容易阅读

例如:

WITH first_t AS
 (SELECT imageid, NAME, id
    FROM first_table),
second_t AS
 (SELECT imageid, NAME, id
    FROM second_table)
SELECT COUNT(src1) AS in_first_table,
       COUNT(src2) AS in_second_table,
       imageid, NAME, id
  FROM (SELECT first_t.*,
               1 AS src1,
               to_number(NULL) AS src2
          FROM first_t
        UNION ALL
        SELECT second_t.*,
               to_number(NULL) AS src1,
               2 AS src2
          FROM second_t)
 GROUP BY imageid,
          NAME,
          id
HAVING COUNT (src1) <> COUNT (src2)

UNION将返回结果的唯一记录。如果指定“所有联合”,则“所有联合”将在结果集中保留重复项

SELECT column1 column2 FROM first_table
UNION
SELECT column1 column2 FROM second_table

UNION将返回结果的唯一记录。如果指定“所有联合”,则“所有联合”将在结果集中保留重复项

SELECT column1 column2 FROM first_table
UNION
SELECT column1 column2 FROM second_table

用你正在使用的数据库标记你的问题。反馈:请回复要求澄清的评论,b收到答案。请记住,每次有人帮助你时,都会有志愿者花自己的时间来帮助你。请用你正在使用的数据库标记你的问题。反馈:请回复要求澄清的评论,并收到b答案。请记住,每次有人帮助你时,志愿者都会花自己的时间来帮助你。如果我不必使用union,如何实现这一点?如果我不必使用union,如何实现这一点??