简体   繁体   English

在以下查询中,如何在where子句中使用“ group”进行比较?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM