2016-02-25 68 views
4

在GTFS中,字段parent_station可以是stop_id(自引用)或NULL。例如(注意parent_station可能是NULL),如何在MySQL中使用自引用字段創建表?

SELECT stop_id, stop_name, parent_station FROM stops where stop_id='1970324837184617' OR parent_station='1970324837184617'; 

+------------------+----------------------+------------------+ 
| stop_id   | stop_name   | parent_station | 
+------------------+----------------------+------------------+ 
| 1970324837184617 | Saint Agne-SNCF  |     | 
| 3377699720880648 | Saint Agne-SNCF  | 1970324837184617 | 
| 3377699720880649 | Saint Agne-SNCF  | 1970324837184617 | 
| 3377699722011100 | Saint Agne-SNCF  | 1970324837184617 | 
| 3377699722011101 | Saint Agne-SNCF  | 1970324837184617 | 
| 3377699722914835 | Saint Agne Gare SNCF | 1970324837184617 | 
+------------------+----------------------+------------------+ 
6 rows in set (0,01 sec) 

我創建了一個自引用表:

CREATE TABLE `stops` (
    stop_id VARCHAR(255) NOT NULL PRIMARY KEY, 
    stop_code VARCHAR(255), 
    stop_name VARCHAR(255), 
    stop_desc VARCHAR(255), 
    stop_lat DECIMAL(8,6), 
    stop_lon DECIMAL(8,6), 
    location_type INT(2), 
    parent_station VARCHAR(255), 
    -- the field `parent_station` might be blank (NULL) 
    FOREIGN KEY parent_station REFERENCES stops(stop_id) -- self-referential table fields 
); 

,但遇到的問題,

ERROR 1064 (42000) at line 99: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY parent_station REFERENCES stops(stop_id)
)' at line 11


隨着在@Awita的幫助下,我更正了語法,並且成功創建了表。

FOREIGN KEY (parent_station) REFERENCES stops(stop_id) 

但加載本地數據時發生新問題。

LOAD DATA LOCAL INFILE 'stops.txt' INTO TABLE stops FIELDS TERMINATED BY ',' IGNORE 1 LINES; 

錯誤:

ERROR 1452 (23000) at line 140: Cannot add or update a child row: a foreign key constraint fails (`paris_gtfs`.`stops`, CONSTRAINT `stops_ibfk_1` FOREIGN KEY (`parent_station`) REFERENCES `stops` (`stop_id`)) 

此問題是由NULLparent_station引起的?

回答

5

這是一個簡單的語法錯誤。試試這個:

FOREIGN KEY (parent_station) REFERENCES stops(stop_id) 
+0

發生新的問題。請檢查編輯的問題。 – SparkAndShine

+1

@SparkandShine在最初的問題得到回答後,提出與最初問題完全無關的後續問題是不公平的!請在另一篇文章中提出您的新問題,並將此答案標記爲已接受! – Shadow

+0

@Shadow,thx提醒。 – SparkAndShine

1

我試過表已被該命令創建後添加外鍵和它的作品:

ALTER TABLE stops 
ADD FOREIGN KEY (parent_station) 
REFERENCES stops(stop_id) 
相關問題