我正在将我的地址簿加入我的电子邮件表中,如下所示:
SELECT * FROM messages m
LEFT JOIN addr_book a ON
m.to_msg LIKE a.h_email
OR m.to_msg LIKE a.bill_email
OR m.to_msg LIKE a.b_email
OR m.to_msg LIKE a.w_email
OR m.to_msg LIKE a.other_email
OR m.from_msg LIKE a.h_email
OR m.from_msg LIKE a.bill_email
OR m.from_msg LIKE a.b_email
OR m.from_msg LIKE a.w_email
OR m.from_msg LIKE a.other_email
OR m.cc_msg LIKE a.h_email
OR m.cc_msg LIKE a.bill_email
OR m.cc_msg LIKE a.b_email
OR m.cc_msg LIKE a.w_email
OR m.cc_msg LIKE a.other_email
OR m.bcc_msg LIKE a.h_email
OR m.bcc_msg LIKE a.bill_email
OR m.bcc_msg LIKE a.b_email
OR m.bcc_msg LIKE a.w_email
OR m.bcc_msg LIKE a.other_email
问题是它取出了所有内容,因为有些联系人没有电子邮件并且加入了没有cc_msg =''或bcc_msg =''
的电子邮件有没有办法让我可以在一个列上加入一个表,其列就像'@'??
我尝试了一些像IN (m.to_message LIKE a.h_email WHERE a.h_email LIKE '%@%') OR
等等的东西
但我一直都有错误。
有什么想法吗?
非常感谢!
答案 0 :(得分:0)
如果我理解你的问题,你需要使用AND而不是WHERE:
ON (m.to_message LIKE a.h_email AND a.h_email LIKE '%@%') OR (...
我认为你的第一次测试可能意味着=
而不是LIKE,这会产生这样的结果:
ON (m.to_message = a.h_email AND a.h_email LIKE '%@%') OR (...
或许你只需要这个:
ON m.to_message = a.h_email
与LIKE不同,如果a.h_email
为空但m.to_message
为非空,则相等测试将失败。
答案 1 :(得分:0)
好的,这有助于帮助。我不知道为什么,但我一直认为=在mySQL中区分大小写。我使用了以下内容,它的工作非常精彩。谢谢大家,我敢肯定,如果我接受了适当的培训,我不会在第一时间犯这个错误大声笑。
LEFT JOIN addr_book a ON
(m.to_msg=a.h_email OR m.to_msg=a.bill_email OR m.to_msg=a.b_email OR m.to_msg=a.w_email OR m.to_msg=a.other_email) OR
(m.from_msg=a.h_email OR m.from_msg=a.bill_email OR m.from_msg=a.b_email OR m.from_msg=a.w_email OR m.from_msg=a.other_email) OR
((m.cc_msg!='') AND (m.cc_msg=a.h_email OR m.cc_msg=a.bill_email OR m.cc_msg=a.b_email OR m.cc_msg=a.w_email OR m.cc_msg=a.other_email)) OR
((m.bcc_msg!='') AND (m.bcc_msg=a.h_email OR m.bcc_msg=a.bill_email OR m.bcc_msg=a.b_email OR m.bcc_msg=a.w_email OR m.bcc_msg=a.other_email))