将多个匹配记录从表返回到临时表

时间:2014-09-14 13:58:02

标签: sql temp-tables outer-join

我有一个关于插入临时表的查询。我正在从一个表中查找记录> 2具体标准。

Temp_Table

R1 - ScheduleID - Count(table b.scheduleid) =2 - orderid
1        1                 2                       1
R2 - ScheduleID - Count(table b.scheduleid) =2 - orderid
2        2                 2                       2

表B

R1 - Order ID - ScheduleID
1        1           1
R2 - Order Id - ScheduleID
2        2           2

我想要什么

R1 - ScheduleID - Count(table b.scheduleid) =2 - orderid
1        1                 2                       1
R2 - ScheduleID - Count(table b.scheduleid) =2 - orderid
2        1                 2                       2
R3 - ScheduleID - Count(table b.scheduleid) =2 - orderid
3        2                 2                       3
R4 - ScheduleID - Count(table b.scheduleid) =2 - orderid
4        2                 2                       4

代码

Update Temp_Table a
right outer join table b
on a.id = b.id
Set orderid=b.id (Here I am setting the column in the temp table = to the matching PK from     tableb
Where (extra conditions go here)

上面的代码显示我有一个临时表,其中包含表b中此计划ID的计数为>的计划ID。 1.我现在想在临时表中添加表b中与列调度ID匹配的订单ID。

对于临时表中的每条记录,表b中有2条记录,因为计数是> 2.我遇到的问题是我添加到临时表中以显示表b中的订单ID的列只显示匹配的订单ID之一,而不是两者。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我怀疑你想要这样的东西:

Update Temp_Table a join
       (select b.id
        from table b
        where (extra conditions go here)
        group by b.id
        having count(*) > 2
       ) b
       on a.id = b.id
    Set newcolumnintemptable = b.id;

一些注意事项:

  • 如果您要更新a,那么right outer join没有意义。您需要匹配才能进行更新。
  • 此语法假设为MySQL。
  • 如果b.id确实是主键,那么就没有匹配项,因为这些ID是唯一的。