在SQL中获取子查询错误

时间:2017-10-12 00:33:58

标签: sql sql-server sql-server-2008 subquery mysql-dependent-subquery

尝试使用我当前的表插入到某个表中。这是我当前Temptable的结构:

CustomerID  Name        Values      FakeName
1           John        10apples    10apples_20oranges_30bananas
1           John        20oranges   10apples_20oranges_30bananas
1           John        30bananas   10apples_20oranges_30bananas
2           Steve       15apples    15apples_25oranges_35bananas
2           Steve       25oranges   15apples_25oranges_35bananas
2           Steve       35bananas   15apples_25oranges_35bananas
3           Harvey      10apples    10apples_20oranges_30bananas
3           Harvey      20oranges   10apples_20oranges_30bananas
3           Harvey      30bananas   10apples_20oranges_30bananas

这是我正在执行的代码:

Insert into customer (FakeName,type,address)
select (select distinct FakeName from Temptable),
        2,
        xyz

 from customer c
 where c.fakename not in (select distinct Fakename from TempTable)

获得关注error

  

子查询返回的值超过1。子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时不允许这样做

我想在temptablecustomer表中插入不同的Fakenames,确保假名已经存在,然后不插入重复的fakename

2 个答案:

答案 0 :(得分:2)

select distinct FakeName from Temptable不是标量,所以你不能那样使用它。

我认为这就是你所追求的:

Insert into customer (FakeName,type,address)
select distinct 
        FakeName,
        2,
        xyz
 from Temptable c
 where c.fakename not in (select distinct Fakename from customer)

答案 1 :(得分:0)

我想你想要这样的东西:

0:0:0
10:9:35
10:9:36
12:0:0

注意:

    您的查询中未定义
  • Insert into customer (FakeName, type, address) select distinct tt.FakeName, 2, 'xyz' from temptable tt where not exists (select 1 from customer c where c.fakename = tt.fakename); (除非它是客户中的列,这似乎不太可能)。
  • 如果子查询为xyz的任何名称,
  • not in将过滤所有行。我将其替换为NULL
  • 我推测您要避免not exists中的重复条目,所以我更改了子查询。
  • customer / in与子查询一起使用时,not in是多余的。