我有两个表,一个表包含一列字符串和一列字符串ID,另一个表为空,但它将包含照片ID和字符串ID。如果有助于可视化,则可以使用以下命令创建它们。
CREATE TABLE tag_ref (
tag_id SERIAL PRIMARY KEY,
tag_name VARCHAR(50) NOT NULL
);
CREATE TABLE tag (
tag_id INTEGER NOT NULL,
photo_id INTEGER NOT NULL
);
用户正在提供一个photo_id和一个tag_name。我需要获取相应的tag_id并在标签表中添加一行。我做了几次尝试,但是都没有成功。
尝试#1(假设用户正在提供photo_id 402和tag_name“自然”)
SELECT tag_id
FROM tag_ref
JOIN tag ON tag.tag_id = tag_ref.tag_id;
INSERT INTO tag (photo_id, tag_id)
WHERE 'nature' = tag_ref.tag_name
VALUES (402, tag_ref.tag_id);
错误:pq:“ WHERE”或附近的语法错误
尝试#2
INSERT INTO tag (tag_id, photo_id)
SELECT tag_id, tag_name
FROM tag_ref
WHERE 'nature' = tag_ref.tag_name
VALUES (402, tag_ref.tag_id)
错误:pq:“ VALUES”处或附近的语法错误
我对关系数据库还是很陌生,但是我觉得这应该不是一个困难的操作。我什至要靠近吗?
答案 0 :(得分:1)
运行以下简单的select
:
select tag_id, 402 from tag_ref where tag_name = 'nature'
这将通过tag_name
给出标签ID,并使用硬编码的photo_id
(在您的情况下为402)
然后只需insert into .. select
:
insert into tag
(tag_id, photo_id)
select tag_id, 402 from tag_ref where tag_name = 'nature'
答案 1 :(得分:1)
我认为您正在寻找INSERT INTO ... select
INSERT INTO tag (photo_id, tag_id)
SELECT 402,tag_ref.tag_id
FROM tag_ref
JOIN tag ON tag.tag_id = tag_ref.tag_id
WHERE 'nature' = tag_ref.tag_name
注意
查询中有两列名为tag_id
的列,一列来自tag_ref
,另一列来自tag
,您需要告诉数据库引擎tag_id
您想要的表获取此列。