提问人:cdb 提问时间:4/7/2023 最后编辑:cdb 更新时间:4/7/2023 访问量:70
插入 INTO tableA (...)值(...)其中 id,来自 tableB
Insert INTO tableA (...) Values(...) Where id from tableB
问:
基本上,我有一个人员数据表 - tb_person(姓名,日期和时间,person_id等)和其他膳食表 - tb_meals(meal_id,膳食类型等) ,我想在 meal 中插入一个值,其中 person_id(from tb_person)= 1 的 tb_meals
问题是它忽略了它刚刚插入到每个 ID 中的条件, 这是我的代码:
create table if not exists tb_meal(
meal_id int primary key auto_increment,
meal_type enum("Vegan","Meat","Fish")not null,
meal varchar(100) not null,
price double,
meal_date date not null,
status enum("pending","done") default("pending")
);
create table if not exists tb_person(
person_id int primary key auto_increment,
person_name varchar(100) not null,
office enum("Student","Teacher") not null,
date_order_made DATETIME default now(),
meal_ int,
FOREIGN KEY (meal_) REFERENCES tb_meal(meal_id)
);
insert into tb_pessoas(person_name,office) values("ao","student"),("Tb","Teacher");
INSERT INTO tb_almocos (id_almocos,tipo_almoco,almoco,preco,data_almoco)
SELECT 1,"Carne", "laranajaa",29.30,'2022-03-22'
FROM DUAL
WHERE EXISTS (SELECT 1 FROM tb_pessoas WHERE id_pessoas = 1);
提前致谢
答:
0赞
Barmar
4/7/2023
#1
用于测试其他表的查询是否找到任何内容。EXISTS()
CREATE TABLE tb_person (
person_id INT PRIMARY KEY,
name VARCHAR(30)
);
CREATE TABLE tb_meals (
meal_id INT PRIMARY KEY,
meal_type VARCHAR(30)
);
INSERT INTO tb_person (person_id, name) VALUES (1, 'John Smith');
INSERT INTO tb_meals (meal_id, meal_type)
SELECT 1, 'Dinner'
FROM DUAL
WHERE EXISTS (SELECT 1 FROM tb_person WHERE person_id = 1);
INSERT INTO tb_meals
SELECT 2, 'Lunch'
FROM DUAL
WHERE EXISTS (SELECT 1 FROM tb_person WHERE person_id = 2);
这将添加餐食 1,因为条件为 true,但不会添加餐食 2,因为条件为 false。person_id = 1
person_id = 2
评论
0赞
cdb
4/7/2023
不幸的是,我仍然有同样的问题:条件被忽略,值被插入到所有字段中
0赞
Barmar
4/7/2023
你能用样本数据和预期结果更新问题吗?
0赞
Barmar
4/7/2023
我刚刚测试了它,它起作用了,所以问题可能出在你的病情上。
0赞
Barmar
4/7/2023
我添加了一个指向演示它的 sqlfiddle 演示的链接。
0赞
cdb
4/7/2023
我更新了这个问题,希望现在更清楚了
0赞
SelVazi
4/7/2023
#2
由于主键是 ,那么您可以使用如下方式进行操作:person_id
tb_person
INSERT INTO tb_meal (col1, col2, col3)
select valA, valB, valC
from tb_person
where person_id = 1
valA
和 是要插入的值valB
valC
示例:
INSERT INTO tb_meal (meal_id,meal_type, meal,price,meal_date)
select 1,"Meat", "laranajaa",29.30,'2022-03-22'
from tb_person
where person_id = 1
评论
1赞
Barmar
4/7/2023
我不认为他们想要来自其他表的数据,数据是恒定的。他们只想使用另一个表作为是否插入的条件。
0赞
cdb
4/7/2023
这些值不在另一个表中,这些值是来自用户的输入,基本上我有一个表,其中包含有关 Peapole (person_id..) 和其他有关膳食的数据,我想插入到膳食表(日期、膳食等)中,其中 person_id(来自人员表)=X
0赞
Barmar
4/7/2023
请注意,如果其中有多行满足条件,则需要将许多重复的行插入到 中。otherTable
tbl
0赞
SelVazi
4/7/2023
@cdb我已经更新了我的答案,你能不能看看
0赞
SelVazi
4/7/2023
@barmar这是正确的,那么我的答案只有在唯一的情况下才有效tb_person
上一个:通过mysql在表中插入过程的值
下一个:索引超出范围/条件问题
评论