查找表中的现有行和非现有行

时间:2015-04-08 09:49:06

标签: sql-server select

我目前被一个简单的SQL查询窃听,我真的不是SQL专家,所以这是我的问题。

我有一个相当简单的表,有一些数据:

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

我想查询第一列的一系列值的表格。例如,在('A','B','E')中检索Id的值。所以我的预期结果是:

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

我知道这必须是一个简单的查询,但它让我望而却步。

感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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