0

次のクエリがあります。

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

パーツを選択したくありませんmidpoint.level AS 'midpointlevel'が、それを削除すると、having 句で「エラー コード: 1054. Unknown column 'midpoint.level' in 'having clause'.」というエラーが表示されます。不要な選択セクションを削除するのを手伝ってくれる人はいますか。

4

3 に答える 3

1

最も簡単な方法は、単純なサブクエリを使用することです。

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
于 2013-10-26T09:38:40.873 に答える
0

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;

上記の構文を参照してください

于 2013-10-26T09:33:13.843 に答える
0

GROUP BYに追加すると、選択から削除できます。HAVING IF に慣れていません。これを試して:

GROUP BY parent.id,midpoint.level
HAVING (midpoint.level=0 AND node.level < 2 AND node.level > 0)
ORDER BY parent.id
于 2013-10-26T09:42:57.863 に答える