Как заполнить строку данными из другой таблицы? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть две таблицы, одна из которых содержит столбец строк и столбец идентификаторов строк, а другая пуста, но она будет содержать идентификаторы фотографий и идентификаторы строк.Если это помогает визуализировать вещи, они были созданы с помощью этих команд.

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 "nature")

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 голосов
/ 13 сентября 2018

Я думаю, что вы лжете на 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, какую таблицу вы хотите получить для этого столбца.

0 голосов
/ 13 сентября 2018

Запустите это простое select:

select tag_id, 402 from tag_ref where tag_name = 'nature'

это даст идентификатор тега tag_name и жестко закодировано photo_id (402 в вашем случае)

Тогда просто выполните insert into .. select:

insert into tag
(tag_id, photo_id)
select tag_id, 402 from tag_ref where tag_name = 'nature'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...