两个相同的插入,但用于不同的表 - 一个有效,一个无效
Two identical inserts but for different tables - one works one doesn't
我有两个table;
Table一个
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
)
);
和Table两个
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
table
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;
;
第二个代码在第一次插入后停止,只添加了几行(10 行,应该是 c.180)。
我做错了什么。第一个工作正常的代码也可以在其他 6 个 table 上正常工作,只需更改 table 名称即可。
我一直在搜索 google 并使用我的 SQL 书几个小时,但无法理解它。
谢谢
想通了。 Table 2 中的 Fixture
有一个唯一约束,我没有发现它应该是 Player
的复合键
我有两个table;
Table一个
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
)
);
和Table两个
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
table
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;
;
第二个代码在第一次插入后停止,只添加了几行(10 行,应该是 c.180)。
我做错了什么。第一个工作正常的代码也可以在其他 6 个 table 上正常工作,只需更改 table 名称即可。
我一直在搜索 google 并使用我的 SQL 书几个小时,但无法理解它。
谢谢
想通了。 Table 2 中的 Fixture
有一个唯一约束,我没有发现它应该是 Player