对已连接的表进行过滤,但也包括已加入的表中的数据。过滤表是空的?

时间:2013-03-07 18:13:12

标签: sql sql-server join tags

我有一个包含用户信息的表和一个包含标记信息的表。标签表基本上有TagType,UserID和标签的值。我根据UserID加入了两个表。

现在,我想查询具有TagType = 1的标记值的所有用户的列表。

SELECT [user].name, [tag].value
FROM user LEFT OUTER JOIN 
  tag ON user.id = tag.userid
WHERE [tag].type = 1

到目前为止,这么好。这很有效。

我现在遇到的问题是我还希望在查询中看到没有Tag Type = 1的标签的用户。在这种情况下,它应该只返回NULL。现在,查询不会返回这些用户。

如果我摆脱了' WHERE [tag] .id = 1'然后它们会出现,但它会为每个用户返回几行 - 每个用户对应一个现有的标记类型 - 但我不想这样做。

从某种意义上说,我想得到:

Column 1: User Name
Column 2: Tag value of Tag Type 1 if it exists, otherwise NULL

我被困在那里。我不知道如何让其他用户进入,但保留其他标签类型。

2 个答案:

答案 0 :(得分:1)

WHERE条件置于JOIN条件。

SELECT [user].name, [tag].value
FROM user LEFT OUTER JOIN 
  tag ON user.id = tag.userid and [tag].type = 1

答案 1 :(得分:0)

尝试:

SELECT [user].name, [tag].value
FROM user LEFT OUTER JOIN 
  tag ON user.id = tag.userid AND [tag].type = 1