如何使用read_sql为列匹配和不匹配插入标志

时间:2018-08-20 07:55:14

标签: python mysql pandas

我正在尝试在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

3 个答案:

答案 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)