SQL根据参数选择一个整列?

时间:2013-05-13 17:47:24

标签: sql sql-server-2008

我有这张桌子,需要帮助:

Friends

  • My_E_MailVARCHAR)AND
  • Friends_E_MailVARCHAR

以下是一些示例值:

alester@pam.com carl@pam.com
alester@pam.com greg@pam.com
alester@pam.com jude@pam.com

我需要做的是选择与我在SQL Server 2008中使用My_E_Mail插入的参数不匹配的Friend_E_Mail?

例如:

select Friend_E_Mail
From Friends 
WHERE Friend_E_Mail NOT IN (?)

我想要做的是显示每个人的朋友列表。例如,alester有3个朋友,但是其他人只有一个朋友只有alester。

此外,我无法创建另一个表。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

也许你需要一个UNION:

declare @email varchar(50)
set @email = ?

SELECT
    Friend_E_Mail as email
FROM    
    Friends 
WHERE 
    My_E_Mail = @email
    and Friend_E_Mail <> @email
UNION
SELECT 
    My_E_Mail as email
FROM 
    Friends 
WHERE 
    Friend_E_Mail = @email
    and My_E_Mail <> @email

此代码将为alester@pam.com返回三行,但其他三行中只有一行。

请注意,UNION只会返回DISTINCT行。如果需要保留重复项,请使用UNION ALL。此外,如果您提前知道结果将是不同的,请使用UNION ALL,以节省DISTINCT附带的性能成本。

答案 1 :(得分:0)

以下查询返回整行(不只是1个字段)。如果您需要的基本逻辑匹配,则可以修改它以仅生成具有CASE - WHEN结构的单个列。

select *
From Friends 
WHERE My_E_Mail = ? OR Friend_E_Mail = ?