假设我有一个表
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');