2017-08-02 7 views
0

スタック上のソリューションを検索するのに数時間を費やした後、私はこの回答を正解できないようです。mysql update queryが別の列で動作しない

私は2つのテーブルを持っている:表中の "修理" & "関係"
"修理" は "repair_external_supplierID"、 "relation_id" という名前の4列、 "cliendID" と "仕入先" があります。 (ID列以外)
テーブル "relation"には、 "sRelationNumber" & "sCustomerNumber"という2つの列があります。
「修理」の「supplierID」は空であり、「修理」の「repair_external_supplierID」が「sRelationNumber」と一致する「Relation」の列「ID」のデータで埋められる必要があります。修理 『から『relation_id関係 『から『sCustomerNumber』欄に一致する』「列はときに埋められていなければならない修理、』「関係」
同じことをして、「クライアントID」のために行く』

これはコード:一部reasoneについて

/*--SET SUPPLIER ID --*/ 
UPDATE repairs 
SET supplierID = (
SELECT 
    id 
FROM 
    relation 
WHERE 
    relation.sRelationNumber = repairs.repair_external_supplierID 
) 
WHERE 
supplierID = '' OR supplierID IS NULL; 

/*--SET CLIENT ID --*/ 
UPDATE repairs 
SET clientID = (
SELECT 
    id 
FROM 
    relation 
WHERE 
    relation.sCustomerNumber = repairs.relation_id 
) 
WHERE 
clientID = '' OR clientID IS NULL; 

計画通り最初のクエリが動作する、第1のサブクエリが1行以上を返す」返します"

なぜですか?

+0

自明である - サブクエリが複数の行を返すことさえ伝えます。あなたが何をしているのか見てみましょう。あなたは 'clientID'値を数字で更新したいと思っています。サブクエリを発行します。サブクエリは条件を満たす行が2つ以上見つかったので、その値は 'clientID'に収まらない。最初のクエリでは1行以上の結果が得られないので問題ありません。あなたがしなければならないことは、座ってこの背後にある論理を推論することです。 – Mjh

+0

'relation.sCustomerNumber = repairs.relation_id'は複数の行を返すためです。 – Scott

+0

しかし、 "relation.sRelationNumber = repairs.repair_external_supplierID"は複数の行も返します。そのため、私は問題を見つけることができません:( – George

答えて

0

これは、これらの行のいずれもが同じ数字
を持っていない

RELATION 
id  sCustomerNumber  sSupplierNumber  sRelationNumber 
1  K12345    S456789    R123456 
2  K98765    S456678    R987654 
3  K15789    S957876    R854754 
.... 

これは私の修理・テーブルは次のようになります私のテーブルの内容です:

REPAIRS 
id  clientID  relation_id  supplierID external_supplier_id 
1      K12345       R123456 
2      K98765       R987654   
3      K15789       R854754 

と、これはなるべき:

REPAIRS 
id  clientID  relation_id  supplierID external_supplier_id 
1  1    K12345   1    R123456 
2  2    K98765   2    R987654   
3  3    K15789   3    R854754 
+0

OK、問題を発見しました。ここには何が起こったのですか。 テーブル "修理"には、relation_idに何もない行が含まれていました。 これは、「1行以上」のエラーを引き起こしました。だから、サブクエリ内で "AND(relation.sCustomerNumber <> '')"を追加するだけで、これらのものを除外する必要がありました。 – George

関連する問題