在两列中的一列中查找带参数的行?

时间:2013-05-13 14:49:57

标签: sql sql-server sql-server-2008

我有这张桌子,需要帮助

Friends:

My_E_Mail (VARCHAR) Friends_E_Mail(VARCHAR) 
alester@pam.com carl@pam.com
alester@pam.com greg@pam.com
alester@pam.com jude@pam.com

我需要做的是选择与我插入的参数不匹配的My_E_MailFriend_E_Mail? 例如:

select Friend_E_Mail
From Friends 
WHERE Friend_E_Mail NOT IN(?)

我的问题是如果插入,如何根据该参数选择一个或另一个列。

让我说我插入carl@pam.com唯一应该出现的是Alester,因为卡尔是只有alester而不是Greg和Jude的朋友。

每当我自己发表声明时,我都会向所有Alesters朋友展示 但当我插入卡尔时,我也看到裘德和格雷格甚至认为他们不是朋友。 我也“不能”创建花药表。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

也许这段代码可以帮到你

select Friend_E_Mail
From Friends 
WHERE 'carl@pam.com' NOT IN(Friend_E_Mail, My_E_Mail)

答案 1 :(得分:0)

尝试

DELCARE @email VARCHAR(50) = ?
WITH FRIENDS_CTE (My_E_Mail, Friend_E_Mail)
AS
(
  SELECT My_E_Mail, Friends_E_Mail
  FROM FRIENDS
  WHERE My_E_Mail = @email
  UNION 
  SELECT Friends_E_Mail, My_E_Mail
  FROM FRIENDS
  WHERE Friends_E_Mail = @email
)
SELECT Friend_E_Mail
FROM FRIENDS_CTE
WHERE My_E_Mail = @email