【问题标题】:Insert into command inserts nothing, but the select statement returns all the elements neededInsert into 命令不插入任何内容,但 select 语句返回所需的所有元素
【发布时间】: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


    【解决方案1】:

    在没有插入语句的情况下运行插入查询。 您也没有收到任何更新

    • 您对 amenity_connect_to_listing 的内部连接错误
    • amenity_connect_to_listing 中没有相关记录

    一旦查询返回您想要的内容,请重新添加插入语句。 我怀疑不是

    like Amenity.amenity_name
    

    你需要

    like '%' + Amenity.amenity_name + '%'
    

    【讨论】:

    • 如果你的意思是运行SELECT amenity_id FROM Amenity JOIN Amenity_connect_to_Listing ON Amenity_connect_to_Listing.am_name like Amenity.amenity_name;,我试过了,它给了我它应该给的 172123 数字
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2014-09-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2011-07-12
    相关资源
    最近更新 更多