0

いくつかのプロパティを表示し、他のテーブルからの参照数をカウントする次のクエリがあります。

SELECT 
       p.id,p.propName
       (
         SELECT COUNT(*) FROM propLoc WHERE propLoc.propID = p.id
       ) AS number
FROM property as p 
WHERE p.category != 'natural'

これにより、フィルタリングしたいすべての情報を含む適切なテーブルが生成されます。

id | propName | number
3  | Name 1   | 3
4  | Name 2   | 1
5  | Name 3   | 0
6  | Name 4   | 10
etc etc

番号 <= 0 のプロパティを除外したいので、追加しようとしましたが、サブクエリで指定された名前でフィルタリングできないようですAND number > 0と反応しますか?Unknown column 'number' in 'where clause'

どうすれば目標を達成できますか?

4

5 に答える 5

2

使用しているインラインサブクエリは、と同等ですLEFT JOIN。クエリをJoinとして書き直し、 1つにしますINNER。この方法のいずれか:

SELECT p.id
     , p.propName
     , grp.number
FROM property AS p 
  INNER JOIN 
     ( SELECT propID 
            , COUNT(*) AS number
       FROM propLoc
       GROUP BY propID
     ) AS grp 
    ON grp.propID = p.id
WHERE p.category <> 'natural' ;

またはこれ:

SELECT p.id
     , p.propName
     , COUNT(*) AS number
FROM property AS p 
  INNER JOIN propLoc 
    ON propLoc.propID = p.id
WHERE p.category <> 'natural' 
GROUP BY p.id ;
于 2012-07-11T09:12:16.253 に答える
2

機能しない場合は、チェーンの後半で結果をフィルタリングするため、機能することがWHEREよくありますHAVNING

SELECT 
       p.id,p.propName
       (
         SELECT COUNT(*) FROM propLoc WHERE propLoc.propID = p.id
       ) AS number
FROM property as p 
WHERE p.category != 'natural'
HAVING number > 0
于 2012-07-11T09:13:52.010 に答える
2

これを試して::

SELECT 
       p.id,p.propName, count(1) as number
FROM property as p 
inner join propLoc on (propLoc.propID = p.id)
WHERE p.category != 'natural'
group BY p.id
于 2012-07-11T09:08:08.920 に答える
0
SELECT p.id,p.propName,count(p.id) as number
FROM property as p 
inner join propLoc prop WHERE prop.propID = p.id
WHERE p.category != 'natural'
group p.id;

また

SELECT p.id,p.propName,count(p.id) as number
FROM property as p 
left join propLoc prop WHERE prop.propID = p.id
WHERE p.category != 'natural' and number > 0
group p.id;
于 2012-07-11T09:11:20.950 に答える
0
SELECT 
       p.id,p.propName,q.number
       from
       (
         SELECT propID,COUNT(*) as number FROM propLoc WHERE propLoc.propID = p.id
       ) q join
 property as p 
on q.propID=p.id
 where p.category != 'natural'
于 2012-07-11T09:17:22.857 に答える