У меня есть таблица 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
, и ни один из других ответов, похоже, не работал в моей ситуации.