2015-04-08 3 views
0

Я в настоящее время прослушивается простым SQL-запросом, и я действительно не эксперт по SQL, поэтому вот моя проблема.поиск существующих и не существующих строк в таблице

У меня есть довольно простая таблица с некоторыми данными:

------------------------ 
| Id | Related | Value | 
------------------------ 
| A | B  | 1  | 
| A | E  | 2  | 
| B | E  | 3  | 
| C | A  | 2  | 
------------------------ 

Я хотел бы запросить таблицу на диапазоне значений для первого столбца. Например, верните значения для Id в («A», «B», «E»). Таким образом, мой ожидаемый результат:

------------------------ 
| Id | Related | Value | 
------------------------ 
| A | B  | 1  | 
| A | E  | 2  | 
| B | E  | 3  | 
| E | null | null | 
------------------------ 

Я знаю, что это должен быть простой запрос, но он ускользает от меня.

Спасибо.

+0

Я попытался пустячный с некоторой левой присоединиться на самой таблице, но это, очевидно, никуда не ведет ... – Kristof

ответ

0

Вы можете добавить все параметры поиска в CTE или любую временную таблицу и сделать LEFT JOIN с вашей фактической таблицей. Попробуйте что-то вроде этого.

DECLARE @t TABLE 
(
id CHAR(1), 
Related CHAR(1), 
Value int 
) 
INSERT INTO @t VALUES('A','B',1), 
('A','E',2), 
('B','E',3), 
('C','A',2) 

;WITH CTE as 
(
SELECT 'A' ID UNION ALL SELECT 'B' UNION ALL SELECT 'E' 
) 
SELECT CTE.id,t.Related,t.Value 
FROM CTE 
LEFT JOIN @t t ON CTE.id = t.id 
+0

Хорошо, теперь я вижу, как я могу использовать это с темп Таблица. – Kristof

0

попробовать это:

SELECT l.id,d.Related,d.Value 
FROM (values ('A'),('B'),('C')) l(id) 
LEFT JOIN fairly_simple_table d ON l.id = d.id 
+0

Этот ответ жестко закодирован ... Я не вижу, как я могу его использовать. – Kristof

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