sqlite - 不确定如何使用两个表编写 INSERT INTO 并合并 IF NOT EXISTS
问题描述
我正在使用 SQLITE,我有两个表 Teams 和 Fixtures。
我想使用 Teams 表中的 ID 作为 Team_Name 添加新的灯具,但如果 Team_Name 在 Teams 中不存在,我想在执行 INSERT INTO Fixture 之前将其添加到 Teams。
到目前为止我有这个...
INSERT INTO Fixture
VALUES (
Select ID from Teams where Team_Name = ‘Home Team’
);
我认为这将在名称存在的地方起作用。(我无法在远离计算机的情况下进行测试,并尝试在注释中编写代码以供以后测试)。
我曾尝试在多个站点上查找,并且我有一本面向初学者的基本 SQL 书,但我不确定如何编写额外的位,因为我能找到的只是使用一个表插入如果不存在则插入。
我希望我已经适当地写了这个问题,但是由于我是 SQL 和这些论坛的新手,我将不胜感激地收到任何关于更好地提出问题的建议和指导。
解决方案
使用INSERT OR IGNORE
first 尝试将两个团队名称Teams
插入其中,然后将新行插入Fixtures
.
如果表中已经存在团队的名称,则不会发生任何事情。
如果 有一个UNIQUE
约束Team_Name
,这将起作用,这是有道理的:
INSERT OR IGNORE INTO Teams(Team_Name) VALUES
('A Name For Home Team'),
('A Name For Away Team');
INSERT INTO Fixtures (HomeTeamId, AwayTeamId) VALUES
(
(SELECT ID FROM Teams WHERE Team_Name = 'A Name For Home Team'),
(SELECT ID FROM Teams WHERE Team_Name = 'A Name For Away Team')
);
推荐阅读
- python-3.x - 如何使用有条件的增量计数再次循环相同的列表
- django - Django:向用户发送电子邮件
- amazon-web-services - 未处理的拒绝 ServerlessError:发生错误:IamRoleLambdaExecution - 检测到 1 个验证错误
- r - 一天后计算值的平均变化
- python - 如何读取 csv 数据、去除空格/制表符并写入新的 csv 文件?
- c++ - 我是否必须实现所有 4 个运算符重载才能处理所有 const 和非 const 组合?
- html - 在鼠标悬停时更改 SVG 剪贴蒙版的大小
- java - 如何自行部署 Spring Boot 应用程序
- c - 数组如何绕过其声明的长度
- android - 如何修复 Epson Android SDK 中的“未找到实现方法名称”?