我需要一些帮助来确定如何使用连接在表中插入多个记录(当连接返回多个值时)。所以这是场景:
表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);
插入如何工作?
答案 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';
因此列数将匹配。