【发布时间】:2020-06-20 04:55:56
【问题描述】:
我正在将 CSV 导入包含多个实体的数据库中:City、State 和 Country。
我想在表中使用外键来建立引用层次结构:
-
City.State_Ref->State.ID -
State.Country_Ref->Country.ID
所以City 表最终将具有以下架构:
CREATE TABLE "City" (
"ID" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
"Name" INTEGER NOT NULL,
"State_Ref" INTEGER,
FOREIGN KEY("State_Ref") REFERENCES "State"("ID")
)
设置State 和Country 表很容易,但是当不同的Country 记录中出现相同的State 名称时,我无法选择正确的名称:
UPDATE City SET State_Ref = (SELECT ID from State WHERE City.State = State.Name);
这将匹配多条记录,LIMIT 只抓取第一条记录(这并不总是正确的)。
我也尝试过JOIN 创建一个具有正确引用的新表:
SELECT City.Name as Name, State.ID as State_Ref
FROM City
INNER JOIN State ON City.State = State.Name
INNER JOIN Country ON City.Country = Country.Name
ORDER BY City.Name ASC;
但这会导致所有 State 重复项都有多个记录。
示例数据(“仙境”出现问题,因为“科罗拉多”存在于多个国家/地区):
Country State Name
United States New York Kingston
United States Texas Paris
England Kent Kingston
United States Maine Paris
France Île-de-France Paris
United States Colorado Denver
Canada Colorado Wonderland
任何正确设置State_Ref的指针将不胜感激!
【问题讨论】:
-
我认为我不会费心对数据进行规范化,除非您有特定原因(在此数据之外)引用
country和state实体。 -
是的...这是一个更大数据集的样本。 “州”和“国家”等价物各有相关的附加数据。
标签: sql