mysql - 在 sql 语句中使 where 子句可选

标签 mysql sql

这是我当前的查询:

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 子句不适合,它仍然会显示表演者表中没有连接到完成图像记录的记录。

最佳答案

您可以在 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 子句之间的主要区别在于,ON 子句在 JOIN 期间起作用,而 WHERE 子句在连接所有内容之后起作用,从而使不匹配的行从结果集中删除。

关于mysql - 在 sql 语句中使 where 子句可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757595/

相关文章:

sql - Postgres 中数组与多行的读写操作

mysql - JPA 不接受@table(name = "table")

sql - 如何使用sql查询查询每个部分的名称及其线程数?

sql - 使用 SQL 完全复制 postgres 表

MySQL 更新并获取行...或者只选择未锁定的行?

即使结果集为空,SQLite 也会强制打印标题

MySQL 进程卡住

mysql - 使用表 2 中的数据更新表 1

mysql 删除多个表

php - 使用 JSON 更新查询失败