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