2017-04-13 156 views
1

我有一個很大的問題,理解爲什麼查詢在查詢中使用LIKE時工作,而在使用NOT LIKE時不工作。不喜歡mysql查詢

,我將發佈以下查詢:

select DISTINCT (mails), name 
from disposable 
    JOIN (
      SELECT DISTINCT (mail) as mails, 
        CONCAT(toys.firstname, ' ' , toys.lastname) as name 
      FROM toys2 
       join toys ON toys.userid = toys2.id 
      where ((toyid = '27' or toyid = '29') 
        and status != 'Sold' 
        and toys.regdate >= '2017-01-01' 
       ) 
     ) as tab 
WHERE tab.mails LIKE CONCAT('%@', disposable.email) 
+2

你是什麼意思與「不工作」...?它沒有返回任何東西,或者沒有返回你期望的東西? – Twinfriends

+0

正在返回結果,好像比較沒有發生 – user7861842

+0

上面那個查詢中沒有'NOT LIKE' –

回答

0

我想你想要的是更多的東西像下面這樣。請注意,我簡化了架構,以便爲SQL Fiddle減少一點工作量。

SELECT c.email, c.name 
    FROM customer c LEFT JOIN disposable d 
    ON SUBSTR(c.email, INSTR(c.email, '@')+1, LENGTH(c.email)-INSTR(c.email, '@')) = d.email 
WHERE d.email IS NULL; 

基本上,在這裏你得到了客戶的域名,並匹配在disposable表中的條目。最後的WHERE條款使用IS NULL來確定不是一次性的客戶電子郵件地址 - 使用IS NOT NULL來查找那些是一次性的。

希望這會有所幫助。

+0

很好的幫助!如果我可以,還有一個幫助請求。 我從子串獲得的一些域名就像「1.a.'d.email'」。我如何排除這些? d.email之前的通配符似乎不起作用 – user7861842

+0

對不起,我不明白你的問題。 –

+0

您給我的查詢做了以下操作: 將字符串切割爲「@」字符和@包括。我得到例如從[email protected] => gmail.com這很棒。 在一次性桌子上,我得到了例如壞域名=> 10go.com 現在有些域名是[email protected],查詢無法捕獲,因爲它將字符串按原樣進行比較。我如何繞過? 我試過而不是「.... = d.email」 - >「... = CONCAT('%',d.email),但它沒有按預期工作 – user7861842