如何在插入语句中使用 join mysql



假设我有一个表

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 语句吗,以及如何使用?

假设您拥有在 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

您可以正常插入x表的数据。

但是当填充列store_id时,只有在数据在x表中具有id列时,您才能插入数据。

INSERT INTO y VALUES ( **'100a'**, 'jimmy', 'german');
INSERT INTO x VALUES ( '12ab', **'100a'**, 'bun', '21','credit card','2018/09/5');

最新更新