SQL插入多个选择

问题描述 投票:1回答:2

我正在尝试进行查询,我想在此表中插入来自具有指定条件的几个选项的数据。

 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个值当子查询跟随=,<,<=,>或用作表达式时,不允许这样做”

我试图做这个交叉连接查询..但它超过了我..我不明白该怎么做或做什么。

我这样做是因为我想“解雇”一名员工,并将所有数据发送到一张桌子或分配给另一名员工。

sql sql-server
2个回答
2
投票

你可以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

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语法,因为它涉及到包围时更加繁琐)。

© www.soinside.com 2019 - 2024. All rights reserved.