有趣的LEFT JOIN查询

Abe*_*ler 1 sql t-sql sql-server sql-server-2008

至少对我来说很有趣......

说我有两张桌子:

myLookUpTable:

lookupId  | Name
--------    -----
1           Red
2           Green
3           Blue
Run Code Online (Sandbox Code Playgroud)

和InfoTable:

infoId  lookupId  Amount  ParentId
------  --------  ------  --------
1       1         2       332
2       3         14      332
Run Code Online (Sandbox Code Playgroud)

我如何编写一个返回每一行的查询,myLookUpTable并包含来自InfoTable的相关信息(如果某个ParentId存在)?

例:

查询parentId的221将返回以下的NameAmount:

Name  Amount
----  ------
Red   
Green
Blue  
Run Code Online (Sandbox Code Playgroud)

和查询parentId的332将返回以下的NameAmount:

Name  Amount
----  ------
Red   2
Green 
Blue  14
Run Code Online (Sandbox Code Playgroud)

我尝试了左边连接的十种变化而没有运气.以下是我的最新消息:

SELECT mlut.Name, it.Amount
FROM   myLookUpTable as mlut
LEFT JOIN InfoTable as it
ON     mlut.lookupId = it.lookUpId OR it.ParentId is null
where  it.ParentId = 332
Run Code Online (Sandbox Code Playgroud)

这似乎是一个简单的问题,我只是在寻找一些东西?

Dav*_*ker 7

我想这会做你想要的.

SELECT mlut.Name, it.Amount 
  FROM myLookUpTable as mlut 
  LEFT JOIN InfoTable as it 
    ON mlut.lookupId = it.lookUpId 
   AND it.ParentId = 332 
Run Code Online (Sandbox Code Playgroud)

SQL Server 2005测试结果如下

CREATE TABLE [dbo].[myLookUpTable](
    [lookupId] [int] NOT NULL,
    [Name] [varchar](10) NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[InfoTable](
    [infoId] [int] NOT NULL,
    [lookupId] [int] NOT NULL,
    [Amount] [int] NOT NULL,
    [ParentId] [int] NOT NULL
) ON [PRIMARY]

INSERT INTO myLookUpTable Values (1,'Red')
INSERT INTO myLookUpTable Values (2,'Green')
INSERT INTO myLookUpTable Values (3,'Blue')

INSERT INTO infoTable Values (1,1,2,332)
INSERT INTO infoTable Values (2,3,14,332)

SELECT mlut.Name, it.Amount  
  FROM myLookUpTable as mlut  
  LEFT JOIN InfoTable as it  
    ON mlut.lookupId = it.lookUpId  
   AND it.ParentId = 221

Red   NULL
Green NULL
Blue  NULL

SELECT mlut.Name, it.Amount  
  FROM myLookUpTable as mlut  
  LEFT JOIN InfoTable as it  
    ON mlut.lookupId = it.lookUpId  
   AND it.ParentId = 332

Red   2
Green NULL
Blue  14
Run Code Online (Sandbox Code Playgroud)