我加入我的地址簿到我的郵箱表是這樣的:的MySQL LEFT JOIN ON/WHERE
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
等等等等
但我不斷收到錯誤。
任何想法?
謝謝!
爲什麼你用'LIKE b'而不是'a = b'? –
因爲有些用戶保存在帽它(如[email protected])的電子郵件和消息表只包含小寫。 –
你需要閱讀有關[規範化](http://en.wikipedia.org/wiki/Normalization_%28database%29)。您應該有一個包含用戶標識,地址類型和地址的單獨表格,而不是針對不同類型的電子郵件地址具有多列。然後,您可以輕鬆加入(並搜索)匹配的電子郵件地址。 –