【发布时间】:2021-06-15 15:45:21
【问题描述】:
我有两张桌子;
表一
CREATE TABLE Player_Match_Stats_Tackles (
Fixture INTEGER REFERENCES Fixture (ID),
Player INTEGER REFERENCES Player,
Successful INTEGER,
Attempted INTEGER,
Was_Dribbled INTEGER,
Clearances INTEGER,
Interceptions INTEGER,
Complete BOOLEAN DEFAULT FALSE,
PRIMARY KEY (
Fixture,
Player
)
);
还有表二
CREATE TABLE Player_Ratings (
Fixture INTEGER NOT NULL
UNIQUE,
Player INTEGER,
Rating INTEGER,
Source TEXT,
Complete BOOLEAN NOT NULL
DEFAULT FALSE,
FOREIGN KEY (
Player
)
REFERENCES Player
);
我有以下代码可以完美运行;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player1
FROM LineUp
WHERE LineUp.Player1 IS NOT NULL;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player2
FROM LineUp
WHERE LineUp.Player2 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player3
FROM LineUp
WHERE LineUp.Player3 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player4
FROM LineUp
WHERE LineUp.Player4 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player5
FROM LineUp
WHERE LineUp.Player5 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player6
FROM LineUp
WHERE LineUp.Player6 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player7
FROM LineUp
WHERE LineUp.Player7 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player8
FROM LineUp
WHERE LineUp.Player8 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player9
FROM LineUp
WHERE LineUp.Player9 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player10
FROM LineUp
WHERE LineUp.Player10 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player11
FROM LineUp
WHERE LineUp.Player11 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub1
FROM LineUp
WHERE LineUp.Sub1 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub2
FROM LineUp
WHERE LineUp.Sub2 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub3
FROM LineUp
WHERE LineUp.Sub3 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub4
FROM LineUp
WHERE LineUp.Sub4 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub5
FROM LineUp
WHERE LineUp.Sub5 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub6
FROM LineUp
WHERE LineUp.Sub6 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Match_Stats_Tackles (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub7
FROM LineUp
WHERE LineUp.Sub7 IS NOT NULL;
然后我再次使用相同的代码,但使用 Player_Ratings 表
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player1
FROM LineUp
WHERE LineUp.Player1 IS NOT NULL;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player2
FROM LineUp
WHERE LineUp.Player2 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player3
FROM LineUp
WHERE LineUp.Player3 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player4
FROM LineUp
WHERE LineUp.Player4 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player5
FROM LineUp
WHERE LineUp.Player5 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player6
FROM LineUp
WHERE LineUp.Player6 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player7
FROM LineUp
WHERE LineUp.Player7 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player8
FROM LineUp
WHERE LineUp.Player8 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player9
FROM LineUp
WHERE LineUp.Player9 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player10
FROM LineUp
WHERE LineUp.Player10 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Player11
FROM LineUp
WHERE LineUp.Player11 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub1
FROM LineUp
WHERE LineUp.Sub1 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub2
FROM LineUp
WHERE LineUp.Sub2 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub3
FROM LineUp
WHERE LineUp.Sub3 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub4
FROM LineUp
WHERE LineUp.Sub4 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub5
FROM LineUp
WHERE LineUp.Sub5 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub6
FROM LineUp
WHERE LineUp.Sub6 IS NOT NULL;
;
INSERT OR IGNORE INTO Player_Ratings (
Fixture,
Player
)
SELECT LineUp.Fixture,
LineUp.Sub7
FROM LineUp
WHERE LineUp.Sub7 IS NOT NULL;
;
第二个代码在第一次插入之后停止,只添加了几行(应该是 c.180 时是 10 行)。
我做错了什么。第一个可以正常工作的代码也可以在其他 6 个表上正常工作,只需更改表名即可。
我已经在谷歌上搜索并使用我的 SQL 书好几个小时了,但我无法理解它。
谢谢
【问题讨论】:
标签: sqlite sql-insert