mysql - 如何在插入语句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 语句吗?如何使用?
解决方案
假设您拥有需要在 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
推荐阅读
- replace - 如何在ansible中替换某行之后的所有字符串?
- c# - 如何以线程安全的方式为每个 HTTP 请求维护一个对象?
- javascript - puppeteer 等效于 cypress contains() 方法
- javascript - IOS 应用程序在使用 JavaScript 命中时不重定向
- linux - 如何在设备树中设置 GPIO 引脚输出值
- linux - 在shell中处理带有空格的文件名
- c# - 如何从标签图表js中获取线x值
- ios - 而不是来自 URL 的实际图像,而是在图像视图中显示一些随机图像:iOS,Swift
- block - Magento 2:如何在结帐成功页面上显示客户电子邮件?
- c# - 使用正则表达式拆分字符串会导致错误输出