这个问题是插入语句的一部分,我试图从另一个可以插入列的值中选择一个值。
例如,在我的表OnlineServers中,我有列:
ID, ServerID, OnlineSince
在我的第二个表ImportServers中,我有数据列(NewYork和Paris之后的行实际上是空的):
ImportServerName
NewYork
London
Paris
Tokyo
此问题与SQL Server有关。
在我的第三个表中,这是一个名为ServerLookup的查找表,我将这些列包含数据:
ID, ServerName
0 Not specified
1 NewYork
2 London
3 Tokyo
4 Munich
5 Salzburg
问题:我想要一个sql语句,可以选择ID' 0'从ServerLookup表中,如果ImportServerName列的值为空。
到目前为止我所拥有的是:
insert into OnlineServers (ServerID, OnlineSince)
select
(
select ID
from ServerLookup
where ServerLookup.ServerName = ImportServers.ServerName
or ServerLookup.ServerName = ''
),
GETDATE()
from ImportServers
我面临的问题是如果服务器名称匹配,它还会返回一个空服务器名称的额外行。
如何解决此问题。
由于
PS:如果代码中有任何拼写错误,请原谅我
答案 0 :(得分:0)
也许是这样的:
SELECT FIRST(column_name) FROM table_name;
限制返回第一场比赛,也不要在选择括号内吗?
select FIRST(ID)
from ServerLookup
where ServerLookup.ServerName = ImportServers.ServerName
or ServerLookup.ServerName = ''
from ImportServers)
答案 1 :(得分:0)
如果我理解你的问题,请尝试这样的事情
insert into OnlineServers (ServerID, OnlineSince)
select TOP(1) ID ,GETDATE()
from ServerLookup
inner join ImportServers
on ServerLookup.ServerName = ImportServers.ServerName
Where ServerLookup.ServerName = ''
答案 2 :(得分:0)
INSERT INTO OnlineServers
SELECT CASE ImportServerName
WHEN '' THEN 0
ELSE ID
END AS ServerID, GetDate()
FROM ImportedServers s
LEFT JOIN ServerLookup l on s.ImportedServerName = l.ServerName;
这应该这样做。您LEFT JOIN
所以您从ImportedServers获取每条记录并使用CASE
获取0,其中ImportServerName为空。