2012-02-16 4 views
2

EDIT:SQLクエリのリストにあるメールは、ではありません。はtrespに表示されます。MySQLクエリでリストにないものが返される

私は、次のコードを持っている:

SELECT * FROM tresp WHERE email IN ('[email addy here]','[email addy here]',' 
[email addy here]','[email addy here]','[email addy here]') 

これは奇妙に聞こえるが、私がしたい場合もあり、実際にTRESPにされていない電子メールアドレスを示している - ことも可能ということでしょうか?

乾杯、

H.

+0

の作品またはtrespにない電子メールをリストに追加しますか? –

+0

後者 - リスト内の電子メールではないものです。 –

答えて

3

難解な問題ですが、この解決法はそれほどエレガントではありませんが、機能します。

SELECT * FROM (
    SELECT 'email1' AS email UNION 
    SELECT 'email2'   UNION 
    SELECT 'email3'   UNION 
    SELECT 'email4'   UNION 
    SELECT 'email5' 
) AS a WHERE a.email NOT IN (SELECT email FROM tresp); 

If you run into the same charset problems I had, create the table with default charset utf-8.

編集:古いMySQLはそれなしに問題があるように見えるので、ASを追加しました。

デモ:SQLFiddle

+0

これは、あなたの「電子メール」リストを前処理してその長さを知ることができますが、その場合はうまくいくでしょう - そしてたぶん唯一の方法です –

+0

エラー:あなたはSQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文が使えるようにしてください。 ')a where a.email NOT(SELECT email FROM tresp)'行227 –

+0

@ josh.trow私は 'SELECT xx UNION 'の部分は、INのエントリを生成するのと同じ方法で、リストからコード内に生成します。そして、いいえ、リストがクエリの一部でありテーブル内ではない必要がある場合、私は本当に別の方法を考えることができません。 –

5

そう...あなたは、NOT INをしたいですか?

SELECT * 
FROM tresp 
WHERE email NOT IN ('[email addy here]','[email addy here]') 

またはメールアドレスが必要ですか?

SELECT DISTINCT email 
FROM tresp 
WHERE email NOT IN ('[email addy here]','[email addy here]') 
+0

ありがとうが、どちらも私が必要なものを与えるものではない。私は、SQLステートメントの電子メールのリストから知る必要がありますが、それらのどれがtrespにはありません - 意味がありますか? –

+0

あなたはtrespに問い合わせている電子メールのリストを持っていますが、そのリストにある電子メールアドレスを知りたいが、trespには含まれていませんか? –

+0

@ Simonatmso.net:彼が私に欲しいもののように聞こえる –

0

あなたがリストにないTRESPからのメールを表示したいわけでくださいそれはかなりありませんが、これはあなたが望むものを行うことが、よりエレガントな解決策を見つけようとしたが、これは、少なくとも

SELECT 
    findTheseEmails.email 
FROM 
(
    SELECT CONVERT(_latin1 '[email protected]' USING utf8) AS email 
    UNION SELECT CONVERT(_latin1 '[email protected]' USING utf8) 
    UNION SELECT CONVERT(_latin1 '[email protected]' USING utf8) 
    UNION SELECT CONVERT(_latin1 '[email protected]' USING utf8) 
) AS findTheseEmails 

LEFT JOIN tresp 
ON tresp.email = findTheseEmails.email 

WHERE tresp.email IS NULL 
+0

エラー:#1267 - 操作 '='のための照合(latin1_swedish_ci、IMPLICIT)と(utf8_unicode_ci、COERCIBLE)の不正な組み合わせ –

+0

@Homer_Jこの問題の答えは私の答えのリンクを参照してください。 –

+0

@Homer_Jはクエリを調整しましたが、個人的には照合の混合を避けようとしましたが、構成内で少し不公平になります –

関連する問題