0

多対 1 の関連付けを持つテーブル A と B があります (b には fk_a が含まれます)。サンプル テーブルが次のようになっているとします。

A:

id first 
1  sample
2  sample

B:

id fk_a  type value
1  1      som  thing
2  1      oth  other
3  2      som  thing
4  2      oth  any

テーブルAの「最初の」列を一意にしたいと思います。次のことを行うことでそれを達成したいと思います。

希望A:

id first 
1  sample-thing-other
2  sample-thing-any

純粋なMYSQLを使用して、テーブルAでUPDATEおよびCONCATを使用して目的の更新を取得することは可能ですか?

すべてを1つのテーブルにまとめれば簡単です。

UPDATE A 
SET first = CONCAT(first, value)

残念ながら、私は多対一の関連付けを行っており、そのような場合でも可能かどうかはわかりません。

4

2 に答える 2

1

Group_Concatはあなたの友達です。

しかし、私はあなたに第一正規形を思い出させてもいいですか?

于 2012-04-10T10:52:25.433 に答える
1

私はmysqlのインスタンスを持っていないので、テストしていません。group_concatを使用する

UPDATE A, (SELECT fk_a, GROUP_CONCAT(value SEPARATOR '-') as concat_value FROM B GROUP BY fk_a) AS t

SET A.first = CONCAT(A.first, '-', t.concat_value) 

WHERE A.id = t.fk_a;
于 2012-04-10T11:17:09.267 に答える