我正在尝试进行查询,我想在此表中插入来自具有指定条件的几个选项的数据。
INSERT INTO concediati (nume, prenume, idclient, idrent, idcar)
VALUES
((SELECT clients.Firstname FROM clients WHERE id = 1),
(SELECT clients.lastname FROM clients WHERE id = 1),
(SELECT clients.id FROM clients WHERE idteam = 1),
(SELECT rentcar.id FROM rentcar WHERE idteam = 1),
(SELECT cars.id FROM cars WHERE idteam = 1)
);
此查询的问题是它抛出一个错误:
“子查询返回多于1个值当子查询跟随=,<,<=,>或用作表达式时,不允许这样做”
我试图做这个交叉连接查询..但它超过了我..我不明白该怎么做或做什么。
我这样做是因为我想“解雇”一名员工,并将所有数据发送到一张桌子或分配给另一名员工。
你可以JOIN
3桌。
INSERT INTO concediati (nume, prenume, idclient, idrent, idcar)
SELECT c.FirstName, c.LastName, c.id, rc.id, ca.id
FROM clients c
JOIN rentcar rc ON rc.idteam = c.id
JOIN cars ca ON ca.idteam = c.id
WHERE c.id = 1
在JOIN
上添加条件
INSERT INTO concediati (nume, prenume, idclient, idrent, idcar)
SELECT c.FirstName, c.LastName, c.id, rc.id, ca.id
FROM clients c
JOIN cars ca ON ca.idteam = c.id
JOIN rentcar rc ON rc.idteam = c.id AND rc.cardid = c.id
WHERE c.id = 1
假设每个子查询都返回一条记录,您可以通过以下方式使用交叉连接:
insert into concediati (nume, prenume, idclient, idrent, idcar)
select
c1.firstname,
c1.lastname,
c2.id,
c3.id,
c4.id
from
clients c1,
clients c2,
rentcar c3,
cars c4
where
c1.id = 1 and
c2.idteam = 1 and
c3.idteam = 1 and
c4.idteam = 1
或者,使用连接:
insert into concediati (nume, prenume, idclient, idrent, idcar)
select
c1.firstname,
c1.lastname,
c2.id,
c3.id,
c4.id
from
(
(
clients c1 inner join clients c2 on c1.id = c2.idteam
)
inner join rentcar c3 on c1.id = c3.idteam
)
inner join cars c4 on c1.id = c4.idteam
where
c1.id = 1
(由于没有指定RDBMS,我假设连接的MS Access语法,因为它涉及到包围时更加繁琐)。