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将返回以下的Name和Amount:
Name Amount
---- ------
Red
Green
Blue
Run Code Online (Sandbox Code Playgroud)
和查询parentId的332将返回以下的Name和Amount:
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)
这似乎是一个简单的问题,我只是在寻找一些东西?
我想这会做你想要的.
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)
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |