【发布时间】:2015-09-25 08:56:00
【问题描述】:
我需要一些帮助来弄清楚如何使用连接在表中插入多个记录(当连接返回多个值时)。所以这里是场景:
表 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
Table_B 中的示例条目:
1, A, ABC
2, B, XYZ
3, C, XYZ
4, D, ABC
基本上我需要做的是检查描述 = 测试的角色,然后将此自定义角色的条目插入到 Table_B 中,代码 = 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。
有人可以帮忙吗?不希望将存储过程用于相同的目的
谢谢。
已编辑:
Table_A 中的示例条目:
1, A, Standard
2, B , Test
3, C, Test
4, D, Standard
5, E, TEST
Table_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);
插入现在将如何工作?
【问题讨论】:
标签: join sql-insert postgresql-9.3