我正在尝试在2个不同表的比较列之后插入一个标志(匹配/不匹配)。我能够比较两个mysql表列 ,但无法获取如何插入标志列并获取状态(匹配/不匹配)
下面是一个示例,请考虑2个mysql表:
tab1:
email
abc@gamil.com
xyz@email.com
ijk@gmail.com
ghi@gmail.com
pqr@gmail.com
yup@gmail.com
tab2:
email
ijk@gmail.com
yup@gmail.com
tab3:
email
xyz@email.com
pqr@gmail.com
现在我想要这样的输出:
email valid
abc@gamil.com non-match
xyz@email.com match
ijk@gmail.com match
ghi@gmail.com non-match
pqr@gmail.com match
yup@gmail.com match
尝试过熊猫:
data_2=pd.read_sql("select tab1.*,if(tab2.email is not null ,'MATCH','NONMATCH') stataus from tab1 left join tab2 on tab1.email=tab2.email ",con=engine)
为多表比较获取错误的语法:
*但是我该如何处理2张桌子:
这样尝试
data_2 = pd.read_sql(“选择tab1。,if(tab2.email和tab3.email不为null,'MATCH','NONMATCH')状态从tab1左加入tab1.email = tab2上的tab2 .email在tab1.email = tab3.email“,con = engine)上左加入tab3
答案 0 :(得分:1)
可以完全在SQL中解决。
SELECT tab1.email
CASE WHEN tab2.email IS NULL THEN 'non-match' ELSE 'valid' END
FROM tab1 left join tab2 on tab1.email =tab2.email"
大小写/何时在mysql中有条件地分配值
答案 1 :(得分:1)
您与第一个查询非常接近,但是忘记考虑另一个表:
select tab1.email, (tab2.email is not null) as is_match
from tab1
left join tab2
on tab1.email = tab2.email;
我也将使用布尔列而不是存储字符串“ valid”和“ non-match”
答案 2 :(得分:0)
data_2 = pd.read_sql(“选择tab1。,if(tab2.email不为null或tab3.email不为null,'MATCH','NONMATCH')状态从tab1左加入tab1.email = tab2上的tab2 .email离开tab1.email = tab3.email上的加入tab3”,con = engine)