簡體   English   中英

選擇來自TableA(如果存在,則為TableB)的值

[英]SELECT values from TableA (and TableB if exists)

我有一個表product_checklist ,其中包含檢查清單項目。 我想一直抓住它,但是如果表ap_checklists的ap_id存在任何列表項,那么抓住created_date

下面的當前聲明需要對可能的優先級進行某種優先級選擇? 有可能在一個查詢中做到這一點嗎?

SELECT 
    `product_checklists`.*, 
    `ap_checklists`.`ap_id`,
    `ap_checklists`.`created_date`
FROM (`product_checklists`)
LEFT OUTER JOIN 
    `ap_checklists` ON `product_checklists`.`check_id` = `ap_checklists`.`check_id`
WHERE 
    `ap_checklists`.`ap_id` = 195 OR `product_id` = 3
GROUP BY 
    `product_checklists`.`check_process` ORDER BY `product_checklists`.`check_order`

如果您未在group by中指定列或在匯總中指定列,則MySQL本質上會獲取列的隨機值。 如果使用max則保證選擇一個非空值(如果可用):

max(`ap_checklists`.`created_date`)

哪里有問題ap_checklists ap_id = 195應該讀

`product_checklists`.`ap_id` = 195

因為您過濾了左聯接的右側,並且有效地將左聯接轉換為內部聯接。

您的where子句有一個錯誤,因為您使用的是左聯接表,因此不應

如果您想用標准SQL編寫它,則應為:

FROM (`product_checklists`)     
LEFT OUTER JOIN `ap_checklists` ON `product_checklists`.`check_id` = ap_checklists`.`check_id` AND (`ap_checklists`.`ap_id` = 195 OR `product_id` = 3)

在Oracle的SQL中,您可以將其編寫為:

 FROM `product_checklists`, `ap_checklists` 
WHERE  `product_checklists`.`check_id` =(+) `ap_checklists`.`check_id`
  AND (`ap_checklists`.`ap_id` (+)= 195 OR `product_id` = 3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM