1

有人可以为我解释为什么以下方法不起作用:

insert into DrugInteractions(ndc_fk, ndc_pk)
   (select top 1 ndc from DrugList where drug_name like 'cipro%'),
   (select top 1 ndc from DrugList where drug_name like 'tizan%')

中的列ndcDrugList唯一标识某种药物的主键。由于您需要两件事来进行交互,因此该DrugInteractions表有两个副本ndc;这两个ndcs 将是一个复合主键。假设药物 A 的 ndc 为 1,药物 B 的 ndc 为 2,那么 DrugInteraction 中的行将如下所示:

ndc_pk   ndc_fk
1        2

有没有办法使用带有两个查询的插入语句填充表,就像我正在尝试的那样,每列一个?我得到的错误是:

消息 102,级别 15,状态 1,第 2 行
',' 附近的语法不正确

4

3 回答 3

4
insert into DrugInteractions(ndc_fk, ndc_pk)
   select top 1 ndc, newid() from DrugList where drug_name like 'cipro%'
   union
   select top 1 ndc, newid() from DrugList where drug_name like 'tizan%'
于 2013-05-02T19:06:23.217 回答
2

你需要用VALUES它们来组合它们;

insert into DrugInteractions(ndc_fk,ndc_pk)
VALUES(
  (select top 1 ndc from DrugList where drug_name like 'cipro%'),
  (select top 1 ndc from DrugList where drug_name like 'tizan%')
)

一个用于测试的 SQLfiddle

于 2013-05-02T18:49:47.717 回答
2

这是运行多个选择语句的替代方法:

insert into DrugInteractions (ndc_fk, ndc_pk) 
select min(case when drug_name like 'cipro%' then ndc end),
  min(case when drug_name like 'tizan%' then ndc end)
from DrugList

SQL 小提琴演示

于 2013-05-02T18:52:03.007 回答