【发布时间】:2022-01-04 10:45:41
【问题描述】:
首先,我看到了一些接近这个问题的答案,但它不起作用。这就是为什么我创建了一个新问题,这里是规范:
我创建了两个表:
CREATE TABLE car_info (
id int PRIMARY KEY AUTO_INCREMENT NOT NULL,
mileage int,
make varchar(100),
model varchar(100),
fuel varchar(100),
gear varchar(100),
offertype varchar(100)
);
CREATE TABLE sales_info (
id int PRIMARY KEY AUTO_INCREMENT NOT NULL,
FOREIGN KEY(id) REFERENCES car_info(id),
price int,
hp int,
year int
);
我加入了这两个:
select *
from (SELECT *
FROM car_info
) as a
left outer join (SELECT *
FROM sales_info
) as b on a.id = b.id
union
select *
from (SELECT *
FROM car_info
) as a
right outer join (SELECT *
FROM sales_info
) as b on a.id = b.id;
如您所见,id 是这里的常用变量。这里是 car_info 表:
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| mileage | int | YES | | NULL | |
| make | varchar(100) | YES | | NULL | |
| model | varchar(100) | YES | | NULL | |
| fuel | varchar(100) | YES | | NULL | |
| gear | varchar(100) | YES | | NULL | |
| offertype | varchar(100) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
这里是 sales_info 表:
+-------+------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| price | int | YES | | NULL | |
| hp | int | YES | | NULL | |
| year | int | YES | | NULL | |
+-------+------+------+-----+---------+----------------+
这里是我通常用来在单个表中导入 SQL 数据的代码:
app.post('/save', (req, res) => {
let data = { mileage: req.body.mileage, make: req.body.make, model: req.body.model, fuel: req.body.fuel, gear: req.body.gear, offertype: req.body.offertype };
let sql = "INSERT INTO car_info SET ?";
let query = connection.query(sql, data, (err, result) => {
if (err) throw err;
res.redirect('/');
});
});
当我使用此代码并从表单中调用它时,它可以完美运行。但是,我想做的是,我想从表单中调用此代码并将两个表导入到相关信息中,例如:
app.post('/save', (req, res) => {
let data = { mileage: req.body.mileage, make: req.body.make, model: req.body.model, fuel: req.body.fuel, gear: req.body.gear, offertype: req.body.offertype, price: req.body.price, hp: req.body.hp, year: req.body.year };
let sql = "**car_info and sales_info tables code here**";
let query = connection.query(sql, data, (err, result) => {
if (err) throw err;
res.redirect('/');
});
});
最后,我尝试了类似的方法:
let sql = `INSERT INTO car_info
(mileage, make, model, fuel, gear, offertype)
VALUES('${req.body.mileage}', '${req.body.make}',
'${req.body.model}', '${req.body.fuel}',
'${req.body.gear}', '${req.body.offertype}');
INSERT INTO sales_info
(price, hp, year)
VALUES('${req.body.price}', '${req.body.hp}',
'${req.body.year}');`
但这里的问题是,它只在 car_info 中插入数据,而不在 sales_info 中插入数据,尽管我在相关字段中输入了一些值。
我希望问题很清楚,我该如何实现?
【问题讨论】:
-
Small Aside 将
sales_info.id作为自动增量和外键肯定是没有意义的???这在语法上是否有效???? -
没错,主键是“salesid”,fk 是“carsid”。
-
不需要右连接部分。 (它不会添加任何额外的行。)
-
嗨@RiggsFolly 我是这个领域的新手,如果你有任何建议,我真的很高兴:)
-
第 3 点在一个事务中进行 2 个单独的查询会更简单、更可靠。然后可以采取全有或全无的方法来创建这两行
标签: javascript mysql sql node.js web