2016-11-12 139 views
2

H2データベースを使用していて、一部のデータを移動したいとします。このエラーは私をスカラーサブクエリに複数の行が含まれています

Scalar subquery contains more than one row; SQL statement: 

UPDATE CUSTOMER 
SET EMAIL = SELECT service.EMAIL 
FROM CUSTOMER_SERVICE AS service 
INNER JOIN CUSTOMER AS customer ON service.ID = customer.CUSTOMER_SERVICE_ID [90053-192] 90053/90053 (Hilfe) 

を語っているもの:

UPDATE CUSTOMER 
SET EMAIL = SELECT service.EMAIL 
FROM CUSTOMER_SERVICE AS service 
INNER JOIN CUSTOMER AS customer ON service.ID = customer.CUSTOMER_SERVICE_ID; 

私は今、それは私が次のエラーを取得するH2コンソールで実行します。そのために私は次のクエリを作成しましたか?私は、クエリでachievしたい何

EDIT

実はすべてのCUSTOMERCUSTOMER_SERVICEを持っています。そして、単にCOLUMN EMAILCUSTOMER_SERVICEからCUSTOMERに移動したいと思います。そのために、私はすでにユーザーに電子メールの列を追加しました。私は私の質問でそれをすることができることを望みましたが、明らかにそうではありませんでした。

答えて

2

あなたのクエリが構文的に有効ではありません(すべてのサブクエリは、彼らの周りの括弧を持っている必要があります)。

あなたが欠けているのは、相関節です。私はあなたがしたいと考えている:私はこれをすることになっているのか分からない

UPDATE CUSTOMER c 
    SET EMAIL = (SELECT cs.EMAIL 
       FROM CUSTOMER_SERVICE s 
       WHERE s.ID = c.CUSTOMER_SERVICE_ID 
       ); 

[90053-192] 90053/90053 (Hilfe)

0

選択クエリが複数の行を返しています。あなたがそれをしたくなければ、集約やLIMIT 1などの何かをする必要があります。

+0

しかし私は、私が持っているすべての顧客に対してtahtクエリを実行する必要があります。 – Mulgard

1

少なくとも1人のお客様のサブクエリには、複数のメールアドレスがあります。

あなたは可能性があり... (Select top 1 serverice.email ... それとも... (Select max(serverice.email) ...

Update Customer Set EMail=B.Email 
From Customer A 
Join (Select ID,max(EMail) as EMail From CUSTOMER_SERVICE Group By ID) B 
    on (A.CUSTOMER_SERVICE_ID = B.ID) 
+0

@Mulgardエラーはそうではないと言います。 NULLはありますか? –

+0

@Mulgard BINGO! –

+0

@Mulgard私の最初の選択肢はmax()オプションです –