通过在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
如果您查看两个表数据,Table2
中的最后一行表示Col22-150851771618
中缺少Table1
。所以我需要显示Table1
完整数据和Table2
的最后一行,因为Table1
加入了Col1
和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
中缺少Col22,如下所示
JOIN
如何通过加入Col1
和Col11
,使用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
来完成此操作?我对此很困惑。任何人都可以帮助我吗?
更新: - 更多方案
表1
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
表2
1345653
所以输出应该是这样的 - 这个704318001
ID的含义,我需要在同一个地方和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
都在一起。
{{1}}
基本上,获取表1中的第一个表和第二个表,其数据不在表1中
答案 0 :(得分:4)
LEFT JOIN
应该有效..
但根据您的数据,我认为您应该加入Col22
到Col2
,因为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
答案 1 :(得分:1)
我认为你需要在table2中添加行,在table1中的前三列中找不到匹配项。您可以将union all和exists结合使用。如果数据库支持except,您可以使用它而不是存在。
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)
UPDATE after clarification: if you can use union all and left join this SQL FIDDLE should help:
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
答案 2 :(得分: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
答案 3 :(得分:0)
为什么不简单 -
SELECT * FROM Table2;
否则请将问题更清楚。