Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多个id上的内部联接';如果它们不为null,则为s_Sql_Database_Join_Hive - Fatal编程技术网

Sql 多个id上的内部联接';如果它们不为null,则为s

Sql 多个id上的内部联接';如果它们不为null,则为s,sql,database,join,hive,Sql,Database,Join,Hive,我在创建捕获以下记录的联接时遇到了一些问题。我昨天花了大约5个小时想弄明白,但是弄不明白 我有两张桌子,桌子A和桌子B 这两个表都有以下列: ID_1, ID_2, ID_3, ID_4 现在,我需要在两个表之间创建一个连接,以便结果在匹配的ID上提取不为null的记录,如果超过1个ID匹配,那么我将使用所有匹配的ID提取记录,因此有两种情况: 场景1:两个表中的所有ID都完全匹配(这很容易编码) 在这里,我将通过所有ID加入。 +--------+---------+---------+-

我在创建捕获以下记录的联接时遇到了一些问题。我昨天花了大约5个小时想弄明白,但是弄不明白

我有两张桌子,桌子A桌子B 这两个表都有以下列:

ID_1, ID_2, ID_3, ID_4 
现在,我需要在两个表之间创建一个连接,以便结果在匹配的ID上提取不为null的记录,如果超过1个ID匹配,那么我将使用所有匹配的ID提取记录,因此有两种情况:

场景1:两个表中的所有ID都完全匹配(这很容易编码)

在这里,我将通过所有ID加入。

+--------+---------+---------+--------+
| A.ID_1 |  A.ID_2 |  A.ID_3 | A.ID_4 |
+--------+---------+---------+--------+
| CAD    |   AAPL  |     853 |    200 |
+--------+---------+---------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    | AAPL   |    853 |    200 |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    |  TSLA  |    341 | NULL   |
+--------+--------+--------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    |  TSLA  |  NULL  |    250 |
+--------+--------+--------+--------+
场景2:两个表中有一个或多个ID匹配,其余为空(也很简单)

在这里,我只能通过ID_1和ID_3加入。

+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    | NULL   |  933   | NULL   |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   | NULL   |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  NULL  |   250  |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  |  NULL  |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| ID_1   | ID_2   | ID_3   | ID_4   |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   |  NULL  |
+--------+--------+--------+--------+
场景3:表中有一个或多个ID匹配,但有些不匹配

这里我只需要在ID_1和ID_2上加入,因为ID_3和ID_4对于各自的表都是空的。

+--------+---------+---------+--------+
| A.ID_1 |  A.ID_2 |  A.ID_3 | A.ID_4 |
+--------+---------+---------+--------+
| CAD    |   AAPL  |     853 |    200 |
+--------+---------+---------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    | AAPL   |    853 |    200 |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    |  TSLA  |    341 | NULL   |
+--------+--------+--------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    |  TSLA  |  NULL  |    250 |
+--------+--------+--------+--------+
场景4:所有ID都为NULL,因此记录被拒绝

所以如果 表A包含以下内容:

+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    | NULL   |  933   | NULL   |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   | NULL   |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  NULL  |   250  |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  |  NULL  |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| ID_1   | ID_2   | ID_3   | ID_4   |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   |  NULL  |
+--------+--------+--------+--------+
表B包含以下内容:

+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    | NULL   |  933   | NULL   |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   | NULL   |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  NULL  |   250  |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  |  NULL  |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| ID_1   | ID_2   | ID_3   | ID_4   |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   |  NULL  |
+--------+--------+--------+--------+
结果将是:

+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+

+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    | NULL   |    933 | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| A.ID_1 | A.ID_2 | A.ID_3 | A.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    | NULL   |  933   | NULL   |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   | NULL   |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  | NULL   |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| B.ID_1 | B.ID_2 | B.ID_3 | B.ID_4 |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  NULL  |   250  |
+--------+--------+--------+--------+
| NULL   |  NULL  |  NULL  |  NULL  |
+--------+--------+--------+--------+
+--------+--------+--------+--------+
| ID_1   | ID_2   | ID_3   | ID_4   |
+--------+--------+--------+--------+
| CAD    |  AAPL  |  853   |   200  |
+--------+--------+--------+--------+
| CAD    |  NULL  |  933   |  NULL  |
+--------+--------+--------+--------+ 
| CAD    |  TSLA  |  341   |  NULL  |
+--------+--------+--------+--------+

谢谢

也许你想要这样的东西?总有人会写更短的代码…:-)


嘿,谢谢你的解决方案,我还提出了一个类似的代码,但即使是这个代码也有同样的问题,因为假设在表B中ID_1为NULL,那么它将匹配表a中的ID_1,并作为记录的结果显示它,当ID_1的结果应为NULL时。@SimonWells我给出的解决方案适用于您提供的示例数据。我可能还不太了解你的情况。请更新您的样本数据以及您的预期结果。