【发布时间】:2016-05-02 14:41:22
【问题描述】:
我会尽力解释问题并举例说明。
我有两个表(表 A 和表 B),每个表都有三个可用于连接的键。我想在多个级别上执行连接,并且我想在多个级别上执行连接。我的意思是,如果 Key 1 在两个表之间匹配,则加入该表。剩下的不匹配,使用Key 2加入,剩下的仍然不匹配,使用Key 3加入。 连接的层次顺序很重要。
样本数据:
-----------------------------------------------
| ------ TABLE A ------ | ------ TABLE B ------ |
| KEY 1 | KEY 2 | KEY 3 | KEY 1 | KEY 2 | KEY 3 |
|-------|-------|-------|-------|-------|-------|
ROW 1 | ABC | AAA | BBB | ABC | PPP | QRS |
ROW 2 | DEF | RRR | NNN | XYZ | RRR | NMO |
ROW 3 | HIJ | TTT | NNN | GHI | MMM | QQQ |
ROW 4 | TUV | VVV | LLL | OPQ | UUU | LLL |
ROW 5 | LMN | III | EEE | XYZ | III | JJJ |
ROW 6 | PQR | CCC | OOO | WXY | HHH | DDD |
-----------------------------------------------
因此,如果我在键 1 上开始加入,则只有第 1 行会匹配,并且我已完成此步骤。然后,我转到第 2 行和第 5 行将匹配的第 2 键。最后,我转到第 3 键,只有第 4 行匹配。
所以我希望我的表 A 和表 B 连接的最终数据看起来像:
-----------------------------------------------
| ------ TABLE A ------ | ------ TABLE B ------ |
| KEY 1 | KEY 2 | KEY 3 | KEY 1 | KEY 2 | KEY 3 |
|-------|-------|-------|-------|-------|-------|
ROW 1 | ABC | AAA | BBB | ABC | PPP | QRS | (Key 1)
ROW 2 | DEF | RRR | NNN | XYZ | RRR | NMO | (Key 2)
ROW 5 | LMN | III | EEE | XYZ | III | JJJ | (Key 2)
ROW 4 | TUV | VVV | LLL | OPQ | UUU | LLL | (Key 3)
-----------------------------------------------
我不知道如何在 SQL 的 ON 语句中放置条件以进行连接,或者我是否需要执行某种嵌套连接。
非常感谢您的帮助!
PS:示例表看起来按照相同的顺序排序,但这只是为了便于理解。
【问题讨论】:
-
请向我们展示您的表格定义。您是否尝试过查询?
-
您可以将
AND与ON一起使用,例如LEFT JOIN a ON a.key1 = b.key1 AND a.key2 != b.key2 AND a.key3 != b.key3,然后对每个键实例执行此操作。这有意义吗? -
你说你想按顺序进行 JOIN,你说后面的连接的输入和键是什么,但是结果与这些连接结果有什么关系?是他们的联合吗?。
-
mysql 还是 sql-server ? ,您已标记了 2 个不同的 dbms。
标签: mysql sql sql-server join