基于层次标准的SQL连接

基于层次标准的SQL连接,sql,join,Sql,Join,我有三个表,我需要将它们连接起来形成第三个表 第一个基本表如下所示: +----------+----------+---------+------------+ | Order No | Supplier | Product | Date | +----------+----------+---------+------------+ | 100 | SuppCo | Shirt | 25.09.2014 | | 101 | SuppCo | Pan

我有三个表,我需要将它们连接起来形成第三个表

第一个基本表如下所示:

+----------+----------+---------+------------+
| Order No | Supplier | Product |    Date    |
+----------+----------+---------+------------+
|      100 | SuppCo   | Shirt   | 25.09.2014 |
|      101 | SuppCo   | Pants   | 25.09.2014 |
|      102 | SuppCo   | Shirt   | 25.09.2014 |
+----------+----------+---------+------------+
+------+--------+
|  ID  | Color  |
+------+--------+
| 1ABC | yellow |
| 1ABD | red    |
| 1ABE | pink   |
| 1ABF | orange |
| 1ABG | teal   |
| 2DEG | green  |
| 3HIK | blue   |
+------+--------+
+------+----------+-----------+
|  ID  | Order No | Order Ext |
+------+----------+-----------+
| 1ABC |      100 | -         |
| 1ABD |      100 | Prime     |
| 1ABE |      100 | Basic1    |
| 1ABF |      100 | Basic2    |
| 1ABG |      100 | Basic3    |
+------+----------+-----------+
+----------+------+-------+------------+
| Order No |  ID  | Color |    Date    |
+----------+------+-------+------------+
|      100 | 1ABD | red   | 25.09.2014 |
|      101 | 2DEG | green | 25.09.2014 |
|      102 | 3HIK | blue  | 25.09.2014 |
+----------+------+-------+------------+
第二个表颜色如下所示:

+----------+----------+---------+------------+
| Order No | Supplier | Product |    Date    |
+----------+----------+---------+------------+
|      100 | SuppCo   | Shirt   | 25.09.2014 |
|      101 | SuppCo   | Pants   | 25.09.2014 |
|      102 | SuppCo   | Shirt   | 25.09.2014 |
+----------+----------+---------+------------+
+------+--------+
|  ID  | Color  |
+------+--------+
| 1ABC | yellow |
| 1ABD | red    |
| 1ABE | pink   |
| 1ABF | orange |
| 1ABG | teal   |
| 2DEG | green  |
| 3HIK | blue   |
+------+--------+
+------+----------+-----------+
|  ID  | Order No | Order Ext |
+------+----------+-----------+
| 1ABC |      100 | -         |
| 1ABD |      100 | Prime     |
| 1ABE |      100 | Basic1    |
| 1ABF |      100 | Basic2    |
| 1ABG |      100 | Basic3    |
+------+----------+-----------+
+----------+------+-------+------------+
| Order No |  ID  | Color |    Date    |
+----------+------+-------+------------+
|      100 | 1ABD | red   | 25.09.2014 |
|      101 | 2DEG | green | 25.09.2014 |
|      102 | 3HIK | blue  | 25.09.2014 |
+----------+------+-------+------------+
第三个表的详细信息如下所示:

+----------+----------+---------+------------+
| Order No | Supplier | Product |    Date    |
+----------+----------+---------+------------+
|      100 | SuppCo   | Shirt   | 25.09.2014 |
|      101 | SuppCo   | Pants   | 25.09.2014 |
|      102 | SuppCo   | Shirt   | 25.09.2014 |
+----------+----------+---------+------------+
+------+--------+
|  ID  | Color  |
+------+--------+
| 1ABC | yellow |
| 1ABD | red    |
| 1ABE | pink   |
| 1ABF | orange |
| 1ABG | teal   |
| 2DEG | green  |
| 3HIK | blue   |
+------+--------+
+------+----------+-----------+
|  ID  | Order No | Order Ext |
+------+----------+-----------+
| 1ABC |      100 | -         |
| 1ABD |      100 | Prime     |
| 1ABE |      100 | Basic1    |
| 1ABF |      100 | Basic2    |
| 1ABG |      100 | Basic3    |
+------+----------+-----------+
+----------+------+-------+------------+
| Order No |  ID  | Color |    Date    |
+----------+------+-------+------------+
|      100 | 1ABD | red   | 25.09.2014 |
|      101 | 2DEG | green | 25.09.2014 |
|      102 | 3HIK | blue  | 25.09.2014 |
+----------+------+-------+------------+
最后一个表应该如下所示:

+----------+----------+---------+------------+
| Order No | Supplier | Product |    Date    |
+----------+----------+---------+------------+
|      100 | SuppCo   | Shirt   | 25.09.2014 |
|      101 | SuppCo   | Pants   | 25.09.2014 |
|      102 | SuppCo   | Shirt   | 25.09.2014 |
+----------+----------+---------+------------+
+------+--------+
|  ID  | Color  |
+------+--------+
| 1ABC | yellow |
| 1ABD | red    |
| 1ABE | pink   |
| 1ABF | orange |
| 1ABG | teal   |
| 2DEG | green  |
| 3HIK | blue   |
+------+--------+
+------+----------+-----------+
|  ID  | Order No | Order Ext |
+------+----------+-----------+
| 1ABC |      100 | -         |
| 1ABD |      100 | Prime     |
| 1ABE |      100 | Basic1    |
| 1ABF |      100 | Basic2    |
| 1ABG |      100 | Basic3    |
+------+----------+-----------+
+----------+------+-------+------------+
| Order No |  ID  | Color |    Date    |
+----------+------+-------+------------+
|      100 | 1ABD | red   | 25.09.2014 |
|      101 | 2DEG | green | 25.09.2014 |
|      102 | 3HIK | blue  | 25.09.2014 |
+----------+------+-------+------------+
该表基于基本表,其中我使用订单号和日期。 从订单号中,我想从明细表中获取ID

“基本”和“详细”之间的连接应符合以下标准: 连接相同的订单号并获取订单号Ext='Prime'的ID,如果Prime不作为扩展存在,则订单号Ext='-',如果不存在,则取其余的任何一个,此时无所谓。 在此之后,应该获取ID并从颜色表中获取正确的行


我在考虑换行,但这会消耗大量资源,所以我在想是否有更有效的方法来实现这一点?

我会再添加一列详细信息,您可以在其中优先考虑具有此ID的行。 然后您可以使用此选项选择:

SELECT B.Order_No, C.ID, C.Color, B.Date
FROM [Basic] B
INNER JOIN Detail D ON B.Order_No = D.Order_No 
    AND D.ID = (SELECT TOP 1 D1.ID 
                FROM Detail D1
                WHERE D1.Order_No = B.Order_No
                ORDER BY D1.OrderPriority ASC)
INNER JOIN Color C ON C.ID = D.ID