我正在尝试编写一个涉及3个联接的查询,并且联接之一在同一列上具有多个记录的表上,我试图在单个行中返回所有结果。因此,如果我有3张桌子:
Table 1
| order_ID | order_number
+----------| ---------
| 1 | 4384368434
| 2 |5343443584
| 3 |584364684
+----------+-----------
Table 2
+--------------+--------------------+-----------------
| order_seq_id | data_dictionary_id | node_value_text |
+--------------+--------------------+-----------------
| 1 | 101 |Value
| 2 | 105 |Value
| 3 | 110 |Value
+--------------+--------------------+----------------
table 3
+--------------------+--------------------------+
| data_dictionary_id | DATA_DICTIONARY_MNEMONIC |
+--------------------+--------------------------+
| 101 | 'InitialOrderNumber' |
| 105 | 'InitialOrderDueDate' |
| 110 | 'OrderDetails' |
+--------------------+--------------------------+
我要返回的行是:
Order_ID | DATA_DICTIONARY_MNEMONIC 1| node_value_text 1 | DATA_DICTIONARY_MNEMONIC 2 | node_value_text 2 |
-------------------------------------------------------------------------------------- | ------------------------
1 | InitialOrderNumber | '1256214214' | InitialOrderDueDate | 'Jan 1st'
因此,我想尽可能返回一个单行,该单行具有表1中的所有行(超过了我上面的行)以及另外2个包含InitialOrderNumber和InitialOrderDueDate表2中的node_value_text值的列。 Order_ID连接到order_seq_id上,该命令使用data_dictionary_id连接到表3,以查找哪个data_dictionary_id用于InitialOrderNumbers和Duedates。
我尝试像这样连接同一张表:
SELECT a.order_number, b.order_seq_id, b.node_value_text,
c.DATA_DICTIONARY_MNEMONIC, d.DATA_DICTIONARY_MNEMONIC
FROM table1 a
INNER JOIN table2 b
ON a.order_id = b.order_seq_id
INNER JOIN table3 c
ON B.DATA_DICTIONARY_ID = c.data_dictionary_id
INNER JOIN om_prod.om_order_data_dictionary d
ON B.DATA_DICTIONARY_ID = d.data_dictionary_id
WHERE a.order_id like '3035880'
AND c.DATA_DICTIONARY_MNEMONIC ='InitialOrderNumber'
AND d.DATA_DICTIONARY_MNEMONIC ='InitialOrderDueDate';
但是没有成功。我是否参加了两次正确的比赛?还是有更好的方法来做到这一点?
使用a.order_id(例如“ 3035880”)进行测试。