我有 2 个 WP 表,第一个是标准用户表,第二个是额外字段插件。第二张表由具有字段 user_id、field_id 和 value 的类型构成
我构建了以下查询以从第二个表中提取数据,但无法确定如何根据“州”字段过滤结果。
放入一行 WHERE State
= 'SA' 只会抛出错误代码:1054。'where 子句'中的未知列 'State' 尝试将 'IF' 语句添加到 CASE 行不起作用...有人有任何想法吗?
SELECT
`wpty_users`.`user_login` AS `user_login`,
`wpty_users`.`display_name` AS `display_name`,
MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 8 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `Club`,
MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 9 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `State`
FROM
`wpty_users`
LEFT JOIN `wpty_cimy_uef_data` ON `wpty_users`.`ID` = `wpty_cimy_uef_data`.`USER_ID`
GROUP BY `wpty_cimy_uef_data`.`USER_ID`
ORDER BY `wpty_users`.`user_login`
最佳答案
您可以包装您的查询:
SELECT *
FROM (
SELECT
`wpty_users`.`user_login` AS `user_login`,
`wpty_users`.`display_name` AS `display_name`,
MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 8 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `Club`,
MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 9 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `State`
FROM
`wpty_users`
LEFT JOIN `wpty_cimy_uef_data` ON `wpty_users`.`ID` = `wpty_cimy_uef_data`.`USER_ID`
GROUP BY `wpty_cimy_uef_data`.`USER_ID`
ORDER BY `wpty_users`.`user_login`
) x
WHERE `State` = 'SA'
或者更好的是,您可以在 HAVING
子句中使用列别名(就目前而言,这在 MySQL 中受支持):
SELECT
`wpty_users`.`user_login` AS `user_login`,
`wpty_users`.`display_name` AS `display_name`,
MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 8 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `Club`,
MIN(CASE WHEN `wpty_cimy_uef_data`.`FIELD_ID` = 9 THEN `wpty_cimy_uef_data`.`VALUE` ELSE NULL END) AS `State`
FROM
`wpty_users`
LEFT JOIN `wpty_cimy_uef_data` ON `wpty_users`.`ID` = `wpty_cimy_uef_data`.`USER_ID`
GROUP BY `wpty_cimy_uef_data`.`USER_ID`
HAVING `State` = 'SA'
ORDER BY `wpty_users`.`user_login`
关于mysql - 尝试使用 CASE 过滤查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513360/