【发布时间】:2019-04-04 23:38:31
【问题描述】:
我有一个名为 Listing 的 SQL 表,它代表已出租的房屋。该表有一个主键 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);
我现在必须使用一个类似这样的新表来连接我的两个具有多对多关系的表:
表HOUSE_AMENITIES
+----------+------------+
| house_id | amenity_id |
+----------+------------+
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
+----------+------------+
所以我使用了以下代码,然后我打算从Amenity_connect_to_Listing 中删除列am_name。
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,其他答案似乎都不适用于我的情况。
【问题讨论】:
标签: sql database postgresql