与oracle diff相同:如何比较两个表?除了在mysql中.
假设我有两个表,t1和t2,它们的布局相同但可能包含不同的数据.
区分这两个表的最佳方法是什么?
更精确地说,我试图找出一个简单的SQL查询,告诉我,如果从T1一行数据从不同的数据在T2相应的行
看来我不能使用交叉或减号.当我尝试
SELECT * FROM robot intersect SELECT * FROM tbd_robot
Run Code Online (Sandbox Code Playgroud)
我收到一个错误代码:
[错误代码:1064,SQL状态:42000]您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行的'SELECT*FROM tbd_robot'附近使用正确的语法
我在语法上做错了吗?如果没有,我可以使用另一个查询吗?
编辑:另外,我正在通过免费版DbVisualizer查询.不确定这可能是一个因素.
Qua*_*noi 73
INTERSECT
需要仿效MySQL
:
SELECT 'robot' AS `set`, r.*
FROM robot r
WHERE ROW(r.col1, r.col2, …) NOT IN
(
SELECT *
FROM tbd_robot
)
UNION ALL
SELECT 'tbd_robot' AS `set`, t.*
FROM tbd_robot t
WHERE ROW(t.col1, t.col2, …) NOT IN
(
SELECT *
FROM robot
)
Run Code Online (Sandbox Code Playgroud)
编辑:在单词周围添加`:set
Roe*_*ler 66
您可以使用UNION手动构建交叉点.如果您在两个表中都有一些唯一字段,例如ID,则很容易:
SELECT * FROM T1
WHERE ID NOT IN (SELECT ID FROM T2)
UNION
SELECT * FROM T2
WHERE ID NOT IN (SELECT ID FROM T1)
Run Code Online (Sandbox Code Playgroud)
如果您没有唯一值,您仍然可以展开上面的代码来检查所有字段而不仅仅是ID,并使用AND来连接它们(例如ID NOT IN(...)AND OTHER_FIELD NOT IN(. ..)等)
我在此链接中找到了另一种解决方案
SELECT MIN (tbl_name) AS tbl_name, PK, column_list
FROM
(
SELECT ' source_table ' as tbl_name, S.PK, S.column_list
FROM source_table AS S
UNION ALL
SELECT 'destination_table' as tbl_name, D.PK, D.column_list
FROM destination_table AS D
) AS alias_table
GROUP BY PK, column_list
HAVING COUNT(*) = 1
ORDER BY PK
Run Code Online (Sandbox Code Playgroud)
小智 6
select t1.user_id,t2.user_id
from t1 left join t2 ON t1.user_id = t2.user_id
and t1.username=t2.username
and t1.first_name=t2.first_name
and t1.last_name=t2.last_name
Run Code Online (Sandbox Code Playgroud)
试试这个.这将比较您的表并找到所有匹配的对,如果任何不匹配在左侧返回NULL.
归档时间: |
|
查看次数: |
109888 次 |
最近记录: |