[英]How do I use the `group` in where clause for the comparison in following query?
SELECT *,
(SELECT name FROM oc_filter_group_description fgd
WHERE f.filter_group_id = fgd.filter_group_id AND
fgd.language_id = '1' ) AS `group`
FROM oc_filter f
LEFT JOIN oc_filter_description fd
ON (f.filter_id = fd.filter_id)
WHERE fd.language_id = '1' AND fd.name LIKE '%FAB%'
You can rewrite your query so that it does not use any correlated subqueries in the select clause, but rather only joins: 您可以重写查询,以便它不使用select子句中的任何相关子查询,而仅使用联接:
SELECT f.*, fgd.name, fd.*
FROM oc_filter f
LEFT JOIN oc_filter_group_description fgd
ON f.filter_group_id = fgd.filter_group_id AND
fgd.language_id = '1'
LEFT JOIN oc_filter_description fd
ON f.filter_id = fd.filter_id
WHERE
fd.language_id = '1' AND
fd.name LIKE '%FAB%' AND
-- fgd.name = 'some name'
This approach makes the name
column directly accessible in the WHERE
clause. 这种方法使
name
列可以直接在WHERE
子句中访问。 If you want to keep your current approach, then MySQL offers an option via the HAVING
clause, where aliased items in the select clause can be directly used: 如果要保持当前的方法,MySQL会通过
HAVING
子句提供一个选项,在其中可以直接使用select子句中的别名项:
SELECT *,
(SELECT name FROM oc_filter_group_description fgd
WHERE f.filter_group_id = fgd.filter_group_id AND
fgd.language_id = '1' ) AS `group`
FROM oc_filter f
LEFT JOIN oc_filter_description fd
ON (f.filter_id = fd.filter_id)
WHERE fd.language_id = '1' AND fd.name LIKE '%FAB%'
HAVING `group` = 'some name';
The HAVING
clause in MySQL, when GROUP BY
does not appear, sort of functions as an overloaded WHERE
clause, and aliases are available for use. MySQL中的
HAVING
子句未出现GROUP BY
时,可以作为重载WHERE
子句使用某种函数,并且可以使用别名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.