Mysql 返回带有值的新表,其中的行在两个版本之间进行了修改
我有以下结构Mysql 返回带有值的新表,其中的行在两个版本之间进行了修改,mysql,sql,Mysql,Sql,我有以下结构 Table1 ID SpecificName Value Modified 3 Drogon 73 0 4 Viserion 44 0 5 Rhaegal 70 0 Table2 ID SpecificName Value Modified 8 Drogon 87 0 9 Viserion 20 0 10 Rhaegal 70
Table1
ID SpecificName Value Modified
3 Drogon 73 0
4 Viserion 44 0
5 Rhaegal 70 0
Table2
ID SpecificName Value Modified
8 Drogon 87 0
9 Viserion 20 0
10 Rhaegal 70 0
我想修改修改后的列值,其中Table1.SpecificName==Table2.SpecificName和Table1.Value!=表2.值
并返回如下内容:
Table3
SpecificName Value Modified
Drogon 87 1
Viserion 20 1
Rhaegal 70 0
如何做到这一点
select t1.SpecificName,
t2.Value,
case when t1.Value != t2.Value then 1 else 0 end as Modified
from t1 left join t2 on t1.SpecificName = t2.SpecificName
我们连接这两个表(左连接也用于处理缺少的值)
在比较原始表和联接表的基础上,我们引入了一个带值的修改列。如果值相同,则修改为0。要获得所需结果,可以使用
CASE
select t2.SpecificName, t2.value,
case when (t1.value <> t2.value) then 1
when (t1.value = t2.value) then 0
ELSE NULL
end
from table1 t1
inner join table2 t2
on t1.SpecificName = t2.SpecificName;
选择t2.SpecificName,t2.value,
当(t1.值t2.值)为1时的情况
当(t1.value=t2.value)为0时
否则无效
结束
来自表1 t1
内连接表2 t2
在t1.SpecificName=t2.SpecificName;
内部联接用于假设只需要匹配的值。
下面是使用上述查询根据需要生成的结果
您可以检查演示无需在CASE/WHEN中额外检查名称。如果t2没有该值,则内部联接可能不够。@stanislavL,内部联接的使用是基于这样一种假设,即结果仅用于匹配名称。加上名字是凯斯是我的错:-)谢谢。读起来很对。我会马上检查并接受它。