我有一个具有这种结构的交换表(显示一个示例行):
title | author_firstname | author_lastname | genre
------------+------------------+-----------------+-----------
the promise | robert | crails | thriller
在另一张表genre
中,我有所有书籍类型。我想在第三个表book
中插入相应类型的id。使用此查询插入了书名:
INSERT INTO book(title) SELECT title FROM swap_book;
书表的结构是:
id | title | genre_id
我需要使用Kettle和交换表中的每一行
来完成此操作答案 0 :(得分:0)
INSERT INTO book(title, genre_id)
select title, genre.id
from swap_book
inner join swap_book.genre=genre.genrename
我假设流派表中的流派名称是genrename。
答案 1 :(得分:0)
假设genre
表格如下:
CREATE TABLE genre(genre_id serial PRIMARY KEY, genre text UNIQUE NOT NULL);
您可以执行UPDATE
:
UPDATE book b
SET genre_id = g.genre_id
FROM swap_book s
JOIN genre g ON g.genre = s.genre
WHERE b.title = s.title;
这要求title
在两个表中都是唯一的。
在一个INSERT
中完成所有操作显然更好:
INSERT INTO book (title, genre_id)
SELECT s.title, g.genre_id
FROM swap_book s
LEFT JOIN genre g ON g.genre = s.genre;
如果找不到匹配的类型,我使用LEFT JOIN
来保留行。在这种情况下,genre_id
为NULL。与上面UPDATE
之后的结果相同
根据您的秘密要求,可能还有其他选择......