使用加入

时间:2015-07-07 17:50:31

标签: join sql-insert postgresql-9.3

我需要一些帮助来确定如何使用连接在表中插入多个记录(当连接返回多个值时)。所以这是场景:

表A: A_ID bigserial, Role Varchar(25), Description varchar(25)

表B: B_ID bigserial, Role Varchar(25), Code varchar(25)

表A和B与列Role相关联。

Table_A中的示例条目:

1, A, Standard
2, B , Test
3, C, Test
4, D, Standard

表_B中的示例条目:

1, A, ABC
2, B, XYZ
3, C, XYZ
4, D, ABC

基本上我需要检查的是Roles where description = Test,然后将此自定义角色的条目插入Table_B,Code = ABC(如果条目已经不存在)

以下查询将为我提供表B中没有Code = ABC的任何条目的所有测试描述角色

查询1:

SELECT ROLE FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.ROLE=B.ROLE
WHERE A.Description ='Test'
AND  B.CODE<>'ABC';

我有以下插入查询:

insert into Table_B (Role , Code)
select  (SELECT ROLE FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.ROLE=B.ROLE WHERE A.Description ='Test'AND  B.CODE<>'ABC'), 'ABC';

上述插入查询仅在Query1返回一个角色时有效,但是当Query1返回多于1个结果时,我不确定如何插入table_A。

有人可以帮忙吗?不希望将Stored Procs用于相同的

感谢。

编辑:

Table_A中的示例条目:

1, A, Standard
2, B , Test
3, C, Test
4, D, Standard
5, E, TEST

表_B中的示例条目:

1, A, ABC
2, B, XYZ
3, B, ABC
4, C, DEF
5, C, XYZ
6, D, ABC
7, E, XYZ
8, E, LLL

Query1在这里不起作用:

SELECT ROLE FROM TABLE_A A
INNER JOIN TABLE_B B
ON A.ROLE=B.ROLE
WHERE A.Description ='Test'
AND  B.CODE<>'ABC';

立即使用此查询:

SELECT distinct ROLE FROM TB  where role not in (
SELECT B.ROLE FROM TA A
INNER JOIN TB B
ON A.ROLE=B.ROLE
WHERE A.Description =Test
AND  B.CODE=ABC)
and role in (select role from TA where Description =Test);

插入如何工作?

1 个答案:

答案 0 :(得分:0)

您可以将另一列设为“代码”。

像: insert into Table_B (Role , Code) SELECT ROLE, 'ABC' CODE FROM TABLE_A A INNER JOIN TABLE_B B ON A.ROLE=B.ROLE WHERE A.Description ='Test' AND B.CODE<>'ABC';

因此列数将匹配。