簡體   English   中英

在SQL語句中將where子句設為可選

[英]making a where clause optional in a sql statement

這是我當前的查詢:

SELECT `performers`.`hash`,
        `performers`.`alias`,
        `performers`.`date_updated`,
        `performers`.`status`, 
        IF(`performers`.`status` = 'active', 'deleted','active') AS `statususe`,
        `images`.`image_hash_file` 
FROM `performers` 
LEFT JOIN `images` ON `images`.`asset_id` = `performers`.`id` 
WHERE (`images`.`asset_type` = 'performer') 
ORDER BY `alias` ASC LIMIT 12`

其中有一個where子句

WHERE (`images`.`asset_type` = 'performer')

我希望它是可選的,這樣,如果where子句不合適,它仍會顯示來自performers表的記錄,這些記錄沒有與令人滿意的圖像記錄的聯接。

嘗試這樣的事情:

WHERE (`images`.`asset_type` = 'performer' OR `images`.`asset_type` IS NULL) 

您可以在LEFT JOIN中添加WHERE子句,以便不匹配的行仍在結果集中。

SELECT `performers`.`hash`, `performers`.`alias`, 
  `performers`.`date_updated`, `performers`.`status`,
  IF(`performers`.`status` = 'active', 'deleted','active') AS `statususe`,
  `images`.`image_hash_file`
FROM `performers`
LEFT JOIN `images` ON `images`.`asset_id` = `performers`.`id` AND `images`.`asset_type` = 'performer'
ORDER BY `alias` ASC
LIMIT 12

WHERE和ON子句之間的主要區別在於,當所有內容都加入后,WHERE子句起作用時,ON子句在JOIN期間起作用,從而使不匹配的行從結果集中刪除。

您應該將where條件移到on子句:

SELECT p.`hash`, p.`alias`, p.`date_updated`, p.`status`, 
       IF(p.`status` = 'active',  'deleted', 'active') AS statususe,
       i.`image_hash_file` 
FROM `performers`  p LEFT JOIN
     `images`i
     ON i.`asset_id` = p.`id` and
        i.`asset_type` = 'performer' 
ORDER BY `alias` ASC
LIMIT 12

我還修改了查詢以使用表別名。 它們使查詢更易於編寫和閱讀。

暫無
暫無

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

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