2017-04-13 4 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

あなたが私に与えた質問は以下の通りです: "@"文字と@を含む文字列を切り捨てます。私は例えばのために得る。 from [email protected] => gmail.comこれは素晴らしいことです。 の使い捨てテーブルbad domain named => 10go.com 現在、いくつかのドメインは文字列をそのまま比較するため、クエリがキャッチしない[email protected]です。どのように私はそれをバイパスするのですか? ".... = d.email" - > "... = CONCAT( '%'、d.email)の代わりに試しましたが、期待どおりに動作しません – user7861842

関連する問題