2

2つのフィールドがemailありaddlEmailます。特定の電子メールアドレスがどちらのフィールドにもない場合にのみレコードを選択する選択が必要です。

2つの列でNOTINを使用してみてください(戻り値Cardinality violation: 1241 Operand should contain 2 column(s)::)

SELECT WebUsername, 
  WebPassword, 
  Active, 
  Email, 
  AddlEmail, 
  ShowYear 
FROM Exhibitors e 
WHERE e.Active = '-1' 
AND e.ShowYear = 2013 
AND (e.Email, e.AddlEmail) NOT IN ('test@test.com', 'test2@test.com')"

ANDとORを試しましたが、明らかな理由で機能しません。

徹底するために:

$emails = "'email@email.com', 'email2@email.com'";
// example table data for 2 fields in question
Row | Email              |   AddlEmail
1   | email@email.com    |   email3@email.com
2   | email4@email.com   |   email2@email.com
3   | email5@email.com   |   null
4   | email6@email.com   |   email7@email.com

クエリは行3と4のみを返す必要があります。

ご覧いただきありがとうございます。さらに詳しい説明が必要な場合はお知らせください。

クリス

編集:投稿された回答に応じたサンプルテーブル:

CREATE TABLE `doubleSelect` (
  `Email` varchar(255) DEFAULT NULL,
  `AddlEmail` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `doubleSelect` (`Email`, `AddlEmail`) VALUES
  ('email@email.com', 'email2@email.com'),
  ('email2@email.com', 'email3@email.com'),
  ('email4@email.com', 'email5@email.com'),
  ('email6@email.com', 'email@email.com'),
  (NULL, 'email@email.com'),
  ('email2@email.com', NULL);

サンプルクエリ(最後の行は返されません。返されるはずです):

SELECT *
  FROM `doubleSelect`
  WHERE Email NOT
  IN (
    'email@email.com'
  )
  AND AddlEmail NOT
  IN (
    'email@email.com'
  )
4

2 に答える 2

6

単に

AND e.Email NOT IN ('test@test.com', 'test2@test.com') 
AND e.AddlEmail NOT IN ('test@test.com', 'test2@test.com') 

NULL値を含む:

SELECT *
FROM `doubleSelect`
WHERE (Email IS NULL or Email NOT IN ('email@email.com'))
      AND (AddlEmail IS NULL or AddlEmail NOT IN ('email@email.com'))
于 2012-08-29T19:49:02.903 に答える
2

これを試して

select * 
from Exhibitors 
where (email is null or email not in('email@email.com', 'email2@email.com'))  
and   (addlEmail is null or addlEmail not in ('email@email.com', 'email2@email.com'))
于 2012-08-29T20:19:46.383 に答える