Вставить в команду ничего не вставляет, но оператор select возвращает все необходимые элементы - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть таблица SQL с именем Listing, которая представляет дома, которые были арендованы.В таблице есть первичный ключ id и еще один столбец с именем amenities, в котором содержится информация о каждом доме.Удобства каждого дома отделены друг от друга запятой.Например, ТВ, Интернет, Ванная комната.

Я использовал следующие команды для создания таблицы под названием Amenity со всеми предлагаемыми уникальными удобствами и СЕРИЙНЫМ номером для каждого удобства.

CREATE TABLE Amenity 
AS
    (SELECT DISTINCT 
         regexp_split_to_table(amenities,',') 
     FROM Listing);

ALTER TABLE Amenity
RENAME regexp_split_to_table to amenity_name;

ALTER TABLE Amenity ADD COLUMN amenity_id SERIAL;
ALTER TABLE Amenity ADD PRIMARY KEY(amenity_id);

Iтеперь нужно соединить две мои таблицы, которые имеют отношение многие ко многим, используя новую таблицу, которая будет выглядеть примерно так:

Таблица HOUSE_AMENITIES

+----------+------------+
| house_id | amenity_id |
+----------+------------+
|    1     |      1     |
|    2     |      1     |
|    2     |      2     |
|    2     |      3     |
+----------+------------+

Таким образом, я использовал следующий код, а затем планировал удалить столбец am_name из Amenity_connect_to_Listing.

CREATE TABLE Amenity_connect_to_Listing 
AS
    (SELECT regexp_split_to_table(amenities, ','), id 
     FROM Listing);

ALTER TABLE Amenity_connect_to_Listing
RENAME COLUMN id TO listing_id;

ALTER TABLE Amenity_connect_to_Listing
RENAME COLUMN regexp_split_to_table TO am_name;

ALTER TABLE Amenity_connect_to_Listing
ADD COLUMN amen_id int;

INSERT INTO Amenity_connect_to_Listing(amen_id) 
(SELECT amenity_id FROM Amenity
JOIN Amenity_connect_to_Listing ON Amenity_connect_to_Listing.am_name like Amenity.amenity_name);

Моя проблема в том, что последняя команда выдает INSERT 0 172123, что означает, что хотя 172123элементы, которые были выбраны, не были вставлены в таблицу Amenity_connect_to_Listing, и я не знаю ни, почему это произошло, ни как это исправить.Я проверил другие вопросы с похожей проблемой, но ни один из них не использовал JOIN, и ни один из других ответов, похоже, не работал в моей ситуации.

1 Ответ

0 голосов
/ 04 апреля 2019

Запустить запрос на вставку без оператора вставки.Вы не получаете обновлений, так как

  • неверно ваше внутреннее присоединение к amenity_connect_to_listing
  • в amenity_connect_to_listing нет связанных записей

После возврата запросачто вы хотите, добавьте оператор вставки обратно. Я подозреваю, что вместо

like Amenity.amenity_name

вам нужно

like '%' + Amenity.amenity_name + '%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...