0

尝试使用我当前的表插入到某个表中。这是我目前不是Temptable的结构:在SQL中获取子查询错误

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 

这是我的代码peice的,我执行:

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

子查询返回多个值。这是在子查询如下=,!=,<,< =,>,> =,或当子查询用作表达

我要插入不同Fakenames从temptablecustomer表,使得当不允许确定如果假名已经存在,那么不要插入重复的fakename

+0

为什么你从子查询中选择而不是只选择'c.fakename'本身? – ZLK

回答

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) 
+0

我试过这个,但它插入重复。就像我做“从客户中选择'10apples_20oranges_30bananas'中的FakeName'”时,它给了我3个输出和相同的FakeName。我的期望是看到只有1 – achillies1987

+0

独特删除重复。通过'重复'你的意思是相同的FakeName出现两次?那是因为'xyz'列有不同的值。你需要选择你想要的xyz。 –

+0

只需运行这个:'从Temptable中选择不同的FakeName'你看到重复吗? –

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与子查询时,select distinct是多余的。
+0

我试过这个,但它插入重复。就像当我做“从客户选择* 10apples_20oranges_30bananas”FakeName,“它给我6输出相同的FakeName 。我的期望是看到只有1 – achillies1987

+0

@ achillies1987 ......也许重复看起来是一样的,但是由于空格,隐藏字符或字符看起来相同而不同。 –