首页 > 解决方案 > 如何在插入语句mysql中使用join

问题描述

假设我有一张桌子

CREATE TABLE x (
     id (primary), 
     store_id(foreign, references y (id)),
     item_name, 
     item_quantity, 
     payment_type, 
     date
);

还有一张桌子

CREATE TABLE y (
     id (primary), 
     name, 
     address
);

y 表充满了数据。我需要将数据插入到 x 表中。我的输入是 y 名称,因此使用名称(和其他变量)我应该填写 x 行。我只是不知道如何填写store_id。我在理论上了解外键的作用,但我不知道如何在实践中应用它。我需要它检查 y 表中的名称,然后在 x 表中插入商店的 id。我该怎么做呢?我可以在插入语句中使用 join 吗?我可以使用 WHERE 语句吗?如何使用?

标签: mysqljoin

解决方案


假设您拥有需要在 X 表上插入的所有数据(假设插入次数过多,而不仅仅是一行),但store_id除外,但是您有一个与 Y 表对应的名称,并且该名称是唯一的在 Y 表中。然后你可以做这样的事情:

INSERT INTO X (id, store_id, item_name, item_quantity, payment_type, date)
SELECT
    id,
    (SELECT Y.id FROM Y WHERE Y.name = tbl_values.name) AS store_id,
    item_name,
    item_quantity,
    payment_type,
    date
FROM
    (
        SELECT <id1> AS id, <y_name1> AS name, <item_name1> AS item_name, <item_quantity1> AS item_quantity, <payment_type1> AS payment_type, <date1> AS date
        UNION
        SELECT <id2> AS id, <y_name2> AS name, <item_name2> AS item_name, <item_quantity2> AS item_quantity, <payment_type2> AS payment_type, <date2> AS date
        UNION
        SELECT <id3> AS id, <y_name3> AS name, <item_name3> AS item_name, <item_quantity3> AS item_quantity, <payment_type3> AS payment_type, <date3> AS date

    ) AS tbl_values

推荐阅读