2

通过比较我猜的 Col1 和 Col11,加入两个表并获取 Table1 中缺少的第一个表数据和第二个表数据。因为所有 ID(Col1 和 Col11)都应该放在一起

表格1

Col1      Col2            Col3                  Col4      Col5            Col6 
1345653   330760137950    2012-07-09 21:40:29   1345653   331760137950    1341895229
1345653   110909316904    2012-07-09 21:29:06   1345653   111909316904    1341894546
1345653   221065796761    2012-07-09 19:31:48   1345653   221065796761    1341887518

表2

Col11        Col22         Col33                  
1345653      330760137950   2012-07-09 21:40:29     
1345653      110909316904   2012-07-09 21:29:06     
1345653      221065796761   2012-07-09 19:31:48     
1345653    **150851771618**   2012-07-09 18:57:33 

如果您查看以上两个表格数据,则在Table2meanCol22-150851771618中缺少最后一行Table1。所以我需要显示Table1完整的数据和最后一行,Table2因为 Col22Table1通过加入Col1and丢失Col11,就像下面的输出一样。

1345653   330760137950    2012-07-09 21:40:29   1345653   331760137950    1341895229
1345653   110909316904    2012-07-09 21:29:06   1345653   111909316904    1341894546
1345653   221065796761    2012-07-09 19:31:48   1345653   221065796761    1341887518
1345653 **150851771618**  2012-07-09 18:57:33   NULL       NULL           NULL

我怎样才能JOIN通过加入Col1和来做到这一点Col11?我对此有很多困惑。谁能帮我?

更新:- 更多场景

表格1

Col1            Col2            Col3                   Col4       Col5                Col6
1345653     330760137950    2012-07-09 21:40:29     1345653     331760137950        1341895229
1345653     110909316904    2012-07-09 21:29:06     1345653     111909316904        1341894546
1345653     221065796761    2012-07-09 19:31:48     1345653     221065796761        1341887518

704318001   320941581940    2012-07-09 14:44:48     704318001   321941581940        1341870288 

表2

Col11        Col22         Col33                   Col44   Col55   Col66
1345653      330760137950   2012-07-09 21:40:29     NULL    NULL    NULL
1345653      110909316904   2012-07-09 21:29:06     NULL    NULL    NULL
1345653      221065796761   2012-07-09 19:31:48     NULL    NULL    NULL
1345653    **150851771618**   2012-07-09 18:57:33   NULL    NULL    NULL

704318001  **290738585064**    2012-07-09 14:36:49     NULL    NULL    NULL

所以输出应该是这样的——对于这个 ID 的含义1345653,我需要所有记录在同一个地方并且与704318001. 所以如果你看一下输出,所有的1345653都在一起,而且704318001都在一起。

1345653   330760137950    2012-07-09 21:40:29   1345653   331760137950    1341895229
1345653   110909316904    2012-07-09 21:29:06   1345653   111909316904    1341894546
1345653   221065796761    2012-07-09 19:31:48   1345653   221065796761    1341887518
1345653 **150851771618**  2012-07-09 18:57:33   NULL       NULL           NULL


704318001   320941581940    2012-07-09 14:44:48     704318001   321941581940        1341870288 
704318001  **290738585064**    2012-07-09 14:36:49     NULL    NULL    NULL

基本上,获取第一个完整的表和第二个表,其数据不在 Table1 中

4

4 回答 4

4

一个LEFT JOIN应该工作..

但是根据您的数据,我认为您应该加入Col22Col2因为Col1并且Col11没有唯一值,所以我不知道它们是如何关联的。

SELECT t2.Col11, t2.Col22, t2.Col33, t1.Col4, t1.Col5, t1.Col6
FROM 
    Table2 t2 LEFT JOIN
    Table1 t1 ON t1.Col2 = t2.Col22
于 2012-07-13T22:35:56.020 回答
1

正如我所看到的,您需要从 table2 添加行,在 table1 的前三列中找不到匹配项。您可以将union allexists结合起来。如果数据库支持,除非您可以使用它而不是存在。

select Col1, Col2, Col3, Col4, Col5, Col6
  from table1
union all
select Col11, Col22, Col33, null, null, null
  from table2
 where not exists (select null
                     from table1
                    where table1.col1 = table2.col11
                      and table1.col2 = table2.col22
                      and table1.col3 = table2.col33)

澄清后更新:如果您可以使用 union all 并 left join 这个 SQL FIDDLE 应该会有所帮助:

select buyer_id, item_id, created_time, user_id, product_id, timestamps
  from TestingTable1
union all
select t2.buyer_id, t2.item_id, t2.created_time, null, null, null
  from TestingTable2 t2
  left join TestingTable1 t1
    on t1.buyer_id = t2.buyer_id
   and t1.item_id = t2.item_id
   -- remove this line if you identify duplicated record
   -- by buyer and item only
   and t1.created_time = t2.created_time
 where t1.buyer_id is null
于 2012-07-13T23:27:53.893 回答
0

我不太确定,预期的输出到底是什么 - 例如,您只需要部分外连接还是完全外连接?假设您需要完全外连接,这可能会奏效(T-SQL 语法):

select
    coalesce(t1.col1, t1.col11),
    coalesce(t1.col2, t1.col22),
    coalesce(t1.col3, t1.col33),
    coalesce(t1.col4, t1.col44),
    coalesce(t1.col5, t1.col55),
    coalesce(t1.col6, t1.col66),
from
    Table1 t1
    full outer join Table2 t2 on t2.Col22 = t1.Col2

希望这是你需要的。它应该在列 Col2-Col22 上连接两个表中的所有行,并显示 Table1 中的每个列对值,如果有空值,它应该显示 Table2 中的值

编辑:您不能加入 Col1-Col11 上的表格。这实际上会在这个例子中产生笛卡尔积。但可能 - 取决于数据的真实含义 - 在 Col1=Col11 和 Col2=Col22 上可能有用

于 2012-07-13T22:40:03.123 回答
0

为什么不简单地——

SELECT * FROM Table2;

否则请让问题更清楚。

于 2012-07-13T22:42:29.557 回答