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,内部联接的使用是基于这样一种假设,即结果仅用于匹配名称。加上名字是凯斯是我的错:-)谢谢。读起来很对。我会马上检查并接受它。