0

まず、いくつかのデータベース カット:

+-----+----------------------------------------+----------+--------+
| id  | name                                   | code     | parent |
+-----+----------------------------------------+----------+--------+
|   1 | Basic Materials                        |      101 |   NULL |
|   2 | Consumer Cyclical                      |      102 |   NULL |
|   3 | Financial Services                     |      103 |   NULL |
|   4 | Real Estate                            |      104 |   NULL |
|   5 | Consumer Defensive                     |      205 |   NULL |
|   6 | Healthcare                             |      206 |   NULL |
|   7 | Utilities                              |      207 |   NULL |
|   8 | Communication Services                 |      308 |   NULL |
|   9 | Energy                                 |      309 |   NULL |
|  10 | Industrials                            |      310 |   NULL |
|  11 | Technology                             |      311 |   NULL |
|  12 | Agriculture                            |    10101 |    101 |
|  13 | Agricultural Inputs                    | 10101001 |  10101 |
|  14 | Building Materials                     |    10102 |    101 |
|  15 | Building Materials                     | 10102002 |  10102 |
|  16 | Chemicals                              |    10103 |    101 |
|  17 | Chemicals                              | 10103003 |  10103 |
|  18 | Specialty Chemicals                    | 10103004 |  10103 |
|  19 | Coal                                   |    10104 |    101 |
|  20 | Forest Products                        |    10105 |    101 |
|  21 | Lumber & Wood Production               | 10105006 |  10105 |
|  22 | Paper & Paper Products                 | 10105007 |  10105 |
|  23 | Metals & Mining                        |    10106 |    101 |
|  24 | Aluminum                               | 10106008 |  10106 |
|  25 | Copper                                 | 10106009 |  10106 |
|  26 | Gold                                   | 10106010 |  10106 |
|  27 | Industrial Metals & Minerals           | 10106011 |  10106 |
|  28 | Silver                                 | 10106012 |  10106 |
|  29 | Steel                                  |    10107 |    101 |
|  30 | Coal                                   | 10104005 |  10104 |

したがって、親列には、親 = コードの id 列の値が必要です。私はこれをやろうとしていましたが、自分でこれを理解することはできません。

例えば:

コード列には親列と同じ値があるため、親列に id = 12 の行には値 = 1 が必要です。

手伝ってくれてありがとう!

4

2 に答える 2

0
update table as a 
left join table as b 
on a.parent=b.code 
set a.parent=b.id
于 2013-09-16T12:41:04.710 に答える
0

UPDATE複数のテーブル構文を使用して自己結合を作成できます。

UPDATE my_table a JOIN my_table b ON b.code = a.parent SET a.parent = b.id;

次に、変更されたテーブルに外部キー制約を定義することができます。

ALTER TABLE my_table ADD FOREIGN KEY (parent) REFERENCES my_table (id);

sqlfiddleで参照してください。

ただし、MySQL は再帰関数をサポートしていないため、階層データを表すこの隣接リスト モデルにはあま​​り適していないことに注意してください。代わりに、ネストされたセットまたは推移閉鎖モデルを検討することをお勧めします。

于 2013-09-16T12:42:02.110 に答える