Question

I have the following query.

SELECT parent.id AS 'id', parent.CA_NAME as 'name', node.level AS 'level', midpoint.level AS 'midpointlevel', SUM(ad.id IS NOT NULL) AS 'count'
FROM
category AS parent,
category AS midpoint,
category AS node
LEFT JOIN ad ON ad.id=node.id
AND ad.status='A'
WHERE (node.`LEFT` BETWEEN parent.`LEFT` AND parent.`RIGHT`)
AND (node.`LEFT` BETWEEN midpoint.`LEFT` AND midpoint.`RIGHT`)
AND midpoint.id='1'
GROUP BY parent.id
HAVING IF(midpoint.level=0, node.level < 2, node.level > 0)
ORDER BY parent.id

I don't want to select the midpoint.level AS 'midpointlevel' part but if I remove it the having clause gives an error mentioning : Error Code: 1054. Unknown column 'midpoint.level' in 'having clause'. Can anyone help me to remove the unwanted select section.

Was it helpful?

Solution

The easiest way is to use a simple subquery:

SELECT id, 
       name,
       -- midpointlevel,  <-- commented out, since we don't need this column 
       level, 
       count
FROM (
  SELECT parent.id AS 'id', parent.CA_NAME as 'name', node.level AS 'level',  midpoint.level AS 'midpointlevel', SUM(ad.id IS NOT NULL) AS 'count'
  FROM
  category AS parent,
  category AS midpoint,
  category AS node
  LEFT JOIN ad ON ad.id=node.id
  AND ad.status='A'
  WHERE (node.`LEFT` BETWEEN parent.`LEFT` AND parent.`RIGHT`)
  AND (node.`LEFT` BETWEEN midpoint.`LEFT` AND midpoint.`RIGHT`)
  AND midpoint.id='1'
  GROUP BY parent.id
  HAVING IF(midpoint.level=0, node.level < 2, node.level > 0)
  ORDER BY parent.id
) subquery

OTHER TIPS

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;

Refer above syntax

You can remove it from the select if you add it to the GROUP BY. Not familiar with HAVING IF. Try this:

GROUP BY parent.id,midpoint.level
HAVING (midpoint.level=0 AND node.level < 2 AND node.level > 0)
ORDER BY parent.id
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top