【问题标题】:Insert multiple records with join使用连接插入多条记录
【发布时间】: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


    【解决方案1】:

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

    类似: 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';

    所以列数会匹配。

    【讨论】:

    • 编辑了我的问题。你现在可以帮忙吗?
    • 插入 Table_B (Role , Code) SELECT distinct ROLE, 'ABC' CODE FROM TABLE_A A LEFT JOIN TABLE_B B ON A.ROLE=B.ROLE AND A.Description ='Test' AND B.代码'ABC';
    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多