我有一个查询返回货运信息。有两种类型的物品出货,驱动器和钥匙。在物品发货之前,它不会出现在drive_tracking
表格中,并且我已将IFNULL
添加到那里以弥补这一点。这是查询。连接条件满足时未选择行?
SELECT a.id AS drive_id, CONCAT(a.drive_capacity, a.drive_unit) AS drive_type,
IFNULL(d.type,'drive') AS category, IFNULL(d.status,'outbound') AS ship_status
FROM drive_details a
LEFT JOIN copy_details b ON a.id = b.drive_id
LEFT JOIN records c ON b.id = c.copy_id
LEFT JOIN drive_tracking d ON a.id = d.drive_id AND d.status = 'outbound'
WHERE c.identifier = '9956852'
这里是在drive_tracking
表中没有匹配行的结果。
------------------------------------------
|drive_id|drive_type|category|ship_status|
+----------------------------------------+
|208 |1TB |drive |outbound |
+----------------------------------------+
但我有问题,就是一旦有出货的关键存在于drive_tracking
表我再也看不到驱动器的状态,只有按键。
------------------------------------------
|drive_id|drive_type|category|ship_status|
+----------------------------------------+
|208 |1TB |key |outbound |
+----------------------------------------+
但我需要回到...
------------------------------------------
|drive_id|drive_type|category|ship_status|
+----------------------------------------+
|208 |1TB |drive |outbound |
+----------------------------------------+
|208 |1TB |key |outbound |
+----------------------------------------+
我知道这个问题是与左连接上drive_tracking
表,但一切我已经试过后,我无法找到一个方法来包括驱动器行。
来自drive_details
表的行。
-----------------------------------------------------------
|id |date |capacity|unit |encrypted|status |
+---------------------------------------------------------+
|208 |2017-08-23 |1 |TB |1 |disconnected|
+---------------------------------------------------------+
从drive_tracking
表中排。
-----------------------------------------------------------
|id |drive_id |type |status |number |ship_date |
+---------------------------------------------------------+
|134 |208 |key |outbound |729292222038 |2017-09-10 |
+---------------------------------------------------------+
嗨。你不清楚你想要什么。请阅读并采取最小化,完整和可验证的示例。请修改问题的澄清,而不是评论。 PS首先显示包含所需信息的左连接,然后开始在选择子句中限制和修改它。您也可以删除b&c并限制为某些a.id(s)。我们得到'SELECT a.id,d.type,d.status FROM drive_details a LEFT JOIN drive_tracking d ON a.id = d.drive_id AND d.status ='outbound''。这是否需要数据来生成你想要的结果?你需要什么?什么*是你想要的结果? – philipxy
要清楚的最好方法是在我之前的评论中写下描述该查询的以下句子的适当变体。 (返回相关的中间FROM子句数据sans b&c。)“(id,type,status)在drive_details&(d.drive_id,...)中的/ * aliases * /(a.id,..) )in drive_tracking&/ * left join * /(a.id = d.drive_id&d.status ='outbound'or not(a.id = d.drive_id&d.status ='outbound')&d.status is null))&/ * select */id = a.drive_id&...,/ * select */for a。*&d。*的某些值。 – philipxy