SQLite和多个插入清洁
我想在SQLite数据库中填充一个新创建的表 在这个表中,一些键是对其他表的引用,我不想硬编码这些引用 ->我目前正在使用一个“映射”表,以便使用名称(~常量)获取ID 问题是:这个解决方案有效,但非常冗长 最简单的工作示例:(存储字典单词,使用类别表的外键) 现在,问题的核心是:太冗长了。 本例中只有一个外键,插入几个来说明问题SQLite和多个插入清洁,sqlite,Sqlite,我想在SQLite数据库中填充一个新创建的表 在这个表中,一些键是对其他表的引用,我不想硬编码这些引用 ->我目前正在使用一个“映射”表,以便使用名称(~常量)获取ID 问题是:这个解决方案有效,但非常冗长 最简单的工作示例:(存储字典单词,使用类别表的外键) 现在,问题的核心是:太冗长了。 本例中只有一个外键,插入几个来说明问题 INSERT INTO words(id_category, name) VALUES ((SELECT value FROM CONSTANTS WHERE
INSERT INTO words(id_category, name) VALUES
((SELECT value FROM CONSTANTS WHERE name = "category_noun"),
"hello"),
((SELECT value FROM CONSTANTS WHERE name = "category_abreviation"),
"SO"),
((SELECT value FROM CONSTANTS WHERE name = "category_abreviation"),
"user"),
((SELECT value FROM CONSTANTS WHERE name = "category_character"),
"!")
;
我想要一些类似于伪sqlite代码的东西:
-- same table creations as before
INSERT INTO words(id_category, name) VALUES
-- Fetch constants once
CAT_NOUM = SELECT value FROM CONSTANTS WHERE name = "category_noum"),
CAT_ABREV = SELECT value FROM CONSTANTS WHERE name = "category_abreviation"),
CAT_CHAR = SELECT value FROM CONSTANTS WHERE name = "category_abreviation")
)
-- Fill the table, using constants
(CAT_NOUM, "Hello"),
(CAT_ABREV, "SO"),
(CAT_NOUM, "user"),
(CAT_CHAR, "SO"),
...
;
我想知道
- 这个问题已经有了SQLite解决方案
- 我应该使用
之类的东西,在SQLite脚本中用它的sed
ed值替换硬编码的字符串,如uuu sed\uu CAT\u NOUMgrep
- 以编程方式做这些事情是正确的方法
INSERT…选择和UNION ALL
而不是INSERT…value
:
INSERT INTO words(id_category, name)
SELECT value, 'hello' FROM CONSTANTS WHERE name = 'category_noun' UNION ALL
SELECT value, 'SO' FROM CONSTANTS WHERE name = 'category_abreviation' UNION ALL
SELECT value, 'user' FROM CONSTANTS WHERE name = 'category_abreviation' UNION ALL
SELECT value, '!' FROM CONSTANTS WHERE name = 'category_character';
请参阅。
或用于连接到常量
:
INSERT INTO words(id_category, name)
SELECT c.value, t.column2
FROM CONSTANTS C INNER JOIN (
VALUES ('category_noun', 'hello'),
('category_abreviation', 'SO'),
('category_abreviation', 'user'),
('category_character', '!')
) t ON t.column1 = c.name;
请参阅。
结果:
SELECT * FROM words;
| id | id_category | name |
| --- | ----------- | ----- |
| 1 | 1 | hello |
| 2 | 2 | SO |
| 3 | 2 | user |
| 4 | 3 | ! |
什么是id\u语言
和名称
?我在单词的定义中没有看到它们。对不起,你说得对,我修正了这个例子。我只是测试了一下;复制粘贴+从单词中选择*现在可以了,谢谢
SELECT * FROM words;
| id | id_category | name |
| --- | ----------- | ----- |
| 1 | 1 | hello |
| 2 | 2 | SO |
| 3 | 2 | user |
| 4 | 3 | ! |