想象一下,你有一个这样的表:
+-------------+------------------+------+-----+---------+----------------+
| 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
这代表一个城市或一个州。
例如,如果name
field 是Los Angeles
,它的 parent_id 将表示带有name
字段的行California
。
现在想象你有另一个这样的表:
+-----------------+---------------+------+-----+---------+----------------+
| 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
字段与表id
中的匹配locations
。
在此表中,该state
字段始终为空,因此我想使用表中的name
字段对其进行更新locations
。
我已经尝试过此查询以获取该state
值,但它似乎不起作用(需要很长时间并且没有任何反应):
SELECT name FROM locations WHERE id IN
(SELECT parent_gid FROM locations INNER JOIN cities
ON locations.id = cities.id);
关于如何实现这一目标的任何建议?