如何用来自另一个表的数据填充行?

时间:2018-09-12 22:02:08

标签: database postgresql

我有两个表,一个表包含一列字符串和一列字符串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”处或附近的语法错误

我对关系数据库还是很陌生,但是我觉得这应该不是一个困难的操作。我什至要靠近吗?

2 个答案:

答案 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您想要的表获取此列。