我有一個查詢返回貨運信息。有兩種類型的物品出貨,驅動器和鑰匙。在物品發貨之前,它不會出現在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