0

私はこの問題に何時間も取り組んできましたが、役に立ちませんでした。複数の行を返すサブクエリに関連するstackoverflow.comの質問の多くを見てきましたが、私の場合に役立つものを見つけることができませんでした.

clientとpositionの 2 つのテーブルがあります。points.client_idをclient.id WHERE client.file_name = position.file_nameで更新しようとしています

基本的に、クライアントに割り当てる必要があるポジションのリストがあります。すべてのクライアントには複数のポジションがありますが、すべてのポジションは正確に 1 人のクライアントに割り当てられます。つまり、client_idはpositionで一意ではありませんが、idは client で一意 (主キー)です

これが私がさまざまなバリエーションを試してきたものです:

UPDATE positions 
SET client_id = (SELECT clients.id 
FROM clients 
WHERE clients.file_name = positions.file_name)

戻ります。

1242 - サブクエリが複数の行を返す

助けてくれてありがとう!

4

2 に答える 2

5

LIMIT句を使用します。これにより、結果の量が1行に制限されます。

UPDATE positions 
SET client_id =
    (
     SELECT clients.id 
     FROM clients 
     WHERE clients.file_name = positions.file_name
     LIMIT 1
    )

通常、ベストプラクティスは、SQLで必要なことを実現するためにサブクエリを使用しないことです。

于 2013-01-31T17:40:35.007 に答える
2

複数の行がある場合は、このように使用できます

UPDATE table1 a JOIN table2 b 
ON a.field1 = b.field1 
SET 
a.field2 = b.field2,
a.field3 = b.field3,
a.field4 = b.field4

別の方法

UPDATE table1 a JOIN table2 b 
ON a.field1 = b.field1 
SET 
a.field2 = b.field2,
a.field3 = b.field3,
a.field4 = b.field4
于 2016-07-07T16:04:17.410 に答える