[英]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.