mysqlクエリーデータを実装し、条件に従って別のテーブルに更新する方法の例
5210 ワード
この例では、mysqlがクエリーデータを実装し、条件に従って別のテーブルに更新する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
元のデータベースには3枚のテーブルがあります travel_way:観光路線表、路線の具体的な情報を保存する traveltag:回線ラベルテーブル、回線宛先などの情報を格納 . tagrelation:ラベル対応テーブル、格納回線と宛先の対応関係 ビジネスロジックの変更により、テーブルにマージし、traveltagの宛先情報をtravel_に挿入します.way中です.
まず、すべての回線に対応する宛先を取得し、回線IDでグループ化し、宛先を1行に結合し、カンマで区切る.
まず調べたデータを新しいテーブルmidに保存しました
midテーブルのデータをtravel_に更新しますwayでは、更新なのでinsert into select from文は使えません
目的地をカンマで区切った文字列でtravel_をインポートできました.wayテーブル
いくつかの方法を説明しますconcat
group_concat([DISTINCT]接続するフィールド[Order BYソートフィールドASC/DESC][Separator'セパレータ'])は、同じ行を組み合わせることができます.
idでグループ化し、priceフィールドの値を同じ行に印刷し、カンマで区切る(デフォルト)
idでグループ化してpriceフィールドを1行に再印刷し、カンマで区切る
idでグループ化し、priceフィールドの値を1行に印刷し、カンマで区切り、priceの逆順に並べます.
要求ターゲットdb 2は存在しなければならないが、以下にテストすると、2つのテーブルがあり、構造は以下の通りである.
表2から性別データを検索し、表1に挿入する
結果は気まずいです.私はこのテーブルのsexフィールドを更新したいのですが、新しいデータを挿入するのではなく、このコマンドは空のテーブルにデータをインポートするのに適しています.そのため、上記の実際のニーズでは、新しいテーブルmidを構築し、updateを利用してデータを転送して更新しました.
条件マッチングにより、表1のデータを(更新)表2のデータに置き換え、表1と表2を関連付けなければならない
insert_へのデータ更新に成功しましたoneテーブルのsexフィールドにあります.
MySQLに関する詳細については、「MySQL常用関数大要約」、「MySQLログ操作テクニック大全」、「MySQLトランザクション操作テクニック要約」、「SQL Myストレージプロセステクニック大全」および「MySQLデータベースロックに関するテクニック汇总」を参照してください.
本明細書では、MySQLデータベース・メーターについて説明します.
元のデータベースには3枚のテーブルがあります
まず、すべての回線に対応する宛先を取得し、回線IDでグループ化し、宛先を1行に結合し、カンマで区切る.
SELECT travel_way.id,GROUP_CONCAT(traveltag.content) FROM travel_way LEFT JOIN tagrelation on travel_way.id = tagrelation.travel_id LEFT JOIN traveltag ON tagrelation.tag_id = traveltag.id GROUP BY travel_way.id
まず調べたデータを新しいテーブルmidに保存しました
INSERT into mid (travelway_id,destination) SELECT travel_way.id,GROUP_CONCAT(traveltag.content) FROM travel_way LEFT JOIN tagrelation on travel_way.id = tagrelation.travel_id LEFT JOIN traveltag ON tagrelation.tag_id = traveltag.id GROUP BY travel_way.id
midテーブルのデータをtravel_に更新しますwayでは、更新なのでinsert into select from文は使えません
update travel_way,mid set travel_way.destination = mid.destination where travel_way.id = mid.travelway_id
目的地をカンマで区切った文字列でtravel_をインポートできました.wayテーブル
いくつかの方法を説明しますconcat
group_concat([DISTINCT]接続するフィールド[Order BYソートフィールドASC/DESC][Separator'セパレータ'])は、同じ行を組み合わせることができます.
select * from goods;
+------+------+
| id| price|
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
idでグループ化し、priceフィールドの値を同じ行に印刷し、カンマで区切る(デフォルト)
select id, group_concat(price) from goods group by id;
+------+--------------------+
| id| group_concat(price) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
3 rows in set (0.00 sec)
idでグループ化してpriceフィールドを1行に再印刷し、カンマで区切る
select id,group_concat(distinct price) from goods group by id;
+------+-----------------------------+
| id| group_concat(distinct price) |
+------+-----------------------------+
|1 | 10,20|
|2 | 20 |
|3 | 200,500 |
+------+-----------------------------+
3 rows in set (0.00 sec)
idでグループ化し、priceフィールドの値を1行に印刷し、カンマで区切り、priceの逆順に並べます.
select id,group_concat(price order by price desc) from goods group by id;
+------+---------------------------------------+
| id| group_concat(price order by price desc) |
+------+---------------------------------------+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+------+---------------------------------------+
3 rows in set (0.00 sec)
insert into select from
クエリーされたレコードをテーブルに挿入します.
INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name
要求ターゲットdb 2は存在しなければならないが、以下にテストすると、2つのテーブルがあり、構造は以下の通りである.
select * from insert_one;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | | 25 | |
| 2 | | 26 | |
| 3 | | 28 | |
| 4 | | 30 | |
+----+--------+-----+-----+
4 rows in set
select * from insert_sex;
+----+-----+
| id | sex |
+----+-----+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 2 |
+----+-----+
4 rows in set
表2から性別データを検索し、表1に挿入する
into insert_one(sex) select sex from insert_sex;
Query OK, 4 rows affected
select * from insert_one;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | | 25 | |
| 2 | | 26 | |
| 3 | | 28 | |
| 4 | | 30 | |
| 5 | | | 1 |
| 6 | | | 2 |
| 7 | | | 1 |
| 8 | | | 2 |
+----+--------+-----+-----+
8 rows in set
結果は気まずいです.私はこのテーブルのsexフィールドを更新したいのですが、新しいデータを挿入するのではなく、このコマンドは空のテーブルにデータをインポートするのに適しています.そのため、上記の実際のニーズでは、新しいテーブルmidを構築し、updateを利用してデータを転送して更新しました.
UPDATE tb1,tb2 SET tb1.address=tb2.address WHERE tb1.name=tb2.name
条件マッチングにより、表1のデータを(更新)表2のデータに置き換え、表1と表2を関連付けなければならない
update insert_one,insert_sex set insert_one.sex = insert_sex.sex where insert_one.id = insert_sex.id;
Query OK, 4 rows affected
select * from insert_one;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | | 25 | 1 |
| 2 | | 26 | 2 |
| 3 | | 28 | 1 |
| 4 | | 30 | 2 |
| 5 | | | 1 |
| 6 | | | 2 |
| 7 | | | 1 |
| 8 | | | 2 |
+----+--------+-----+-----+
8 rows in set
insert_へのデータ更新に成功しましたoneテーブルのsexフィールドにあります.
MySQLに関する詳細については、「MySQL常用関数大要約」、「MySQLログ操作テクニック大全」、「MySQLトランザクション操作テクニック要約」、「SQL Myストレージプロセステクニック大全」および「MySQLデータベースロックに関するテクニック汇总」を参照してください.
本明細書では、MySQLデータベース・メーターについて説明します.