2013-05-13 4 views
0

У меня есть эта таблица и нужна помощь:SQL Выбор одного столбца целиком на основе параметров?

Friends:

  • My_E_Mail (VARCHAR) И
  • Friends_E_Mail (VARCHAR)

Вот некоторые выборочные значения:

[email protected] [email protected] 
[email protected] [email protected] 
[email protected] [email protected] 

Что мне нужно сделать, это выбрать My_E_Mail или Friend_E_Mail, который не соответствует параметру, который я подключаю с помощью ? в SQL Server 2008 с использованием.

Например:

select Friend_E_Mail 
From Friends 
WHERE Friend_E_Mail NOT IN (?) 

То, что я хочу сделать, это показать список друзей для каждого человека. Например, у alester есть 3 друга, но у каждого из этих людей есть только один друг, который является alester.

Также я не могу создать другую таблицу.

Любая помощь будет оценена по достоинству.

+2

Не могли бы вы показать еще несколько примеров данных из этой таблицы «Друзья» с другим примером? Непонятно, что вы пытаетесь сделать с помощью приведенного вами примера. –

+0

Я не уверен, что я что-то не хватает, это не то, что вы ищете? 'SELECT My_E_Mail FROM Friends WHERE Friend_E_mail =?' – SOfanatic

+0

то, что я хочу сделать, это показать список друзей для каждого человека, у которого есть 3 друга, но у каждого из этих людей есть только один друг, который является alester. –

ответ

0

Следующий запрос возвращает всю строку (а не только одно поле). Если базовое логическое соответствие вам нужно, оно может быть изменено для создания только одного столбца с структурами CASE - WHEN.

select * 
From Friends 
WHERE My_E_Mail = ? OR Friend_E_Mail = ? 
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 

Этот код будет возвращать три строки для [email protected], но только одна строка для каждого из остальных трех.

Обратите внимание, что UNION будет возвращать только строки DISTINCT. Если вам нужно сохранить дубликаты, используйте UNION ALL. Кроме того, если вы заранее знаете, что результаты будут отличными, используйте UNION ALL, чтобы сохранить стоимость исполнения, которая поставляется с DISTINCT.

+0

OMG СПАСИБО! БУДЬТЕ ЗДОРОВЫ ! –

+0

Я бы поднял голову, но я снова благодарю вас! ЭТО ОТВЕТ !!! ** W00t ** –

Смежные вопросы