1

次のようなテーブルがあると想像してください。

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(11)          | NO   | PRI | NULL    | auto_increment |
| name        | varchar(255)     | NO   |     |         |                |
| parent_id   | int(11)          | YES  | MUL | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

このテーブルを呼びましょうlocations

これは、都市または州を表します。

たとえば、namefieldが、の場合、そのparent_idはフィールドLos Angelesを持つ行を表します。nameCalifornia

ここで、次のような別のテーブルがあると想像してください。

+-----------------+---------------+------+-----+---------+----------------+
| Field           | Type          | Null | Key | Default | Extra          |
+-----------------+---------------+------+-----+---------+----------------+
| id              | int(11)       | NO   | PRI | NULL    | auto_increment |
| name            | varchar(450)  | YES  |     | NULL    |                |
| state           | varchar(135)  | YES  |     | NULL    |                |
+-----------------+---------------+------+-----+---------+----------------+

このテーブルを呼びましょうcities

各行は都市を表し、フィールドはテーブルのにid一致します。idlocations

このテーブルでは、フィールドは常に空なので、テーブルのフィールドstateで更新したいと思います。namelocations

値を取得するためにこのクエリを試しましたstateが、機能していないようです(時間がかかり、何も起こりません)。

SELECT name FROM locations WHERE id IN 
(SELECT parent_gid FROM locations INNER JOIN cities  
ON locations.id = cities.id);

これを達成する方法について何か提案はありますか?

4

2 に答える 2

1

SELECTステートメントのみが必要な場合は、JOIN

SELECT  a.id, a.name, b.name As State
FROM    cities a
        INNER JOIN locations b
            ON a.id = b.id

ただし、テーブルを更新する場合は、

UPDATE  cities a
        INNER JOIN locations b
            On a.ID = b.ID
SET     a.State = b.name

アップデート

SELECT  a.id, a.name, c.name As State
FROM    cities a
        INNER JOIN locations b
            ON a.id = b.id
        LEFT JOIN locations c
            On b.parent_ID = c.id
于 2013-01-21T14:35:29.010 に答える
1

ここに行きます:SQLフィドルに保存してリンクする方法がわかりません-しかし、コードは次のとおりです:

テーブルロカを作成する(
   locaid int、
   locaname varchar(25)、
   locaparent varchar(25));

テーブルcitybを作成します(
  citybid int、
  citybname varchar(25)、
  citybstate varchar(25));

ロカに挿入(ロケイド、ロカネーム、ロカペアレント)
  値(1、'name1'、'parent1');
ロカに挿入(ロケイド、ロカネーム、ロカペアレント)
  値(2、'name2'、'parent2');
ロカに挿入(ロケイド、ロカネーム、ロカペアレント)
  値(3、'name3'、'parent3');
citybに挿入(citybid、citybname、citybstate)
  値(1、'city1'、'');
citybに挿入(citybid、citybname、citybstate)
  値(2、'city2'、'');
citybに挿入(citybid、citybname、citybstate)
  値(3、'city3'、'');

loca、citybを更新します
    citybstate=locaparentを設定します
      ここで、locaid = citybid;
于 2013-01-21T15:21:06.037 に答える