0

私はこのクエリを持っていますが、これは列が存在しないことを示しています

SELECT 
p.content,
(select count(*) from share_member WHERE username='pratik' AND share_id=share) as allow 
FROM posts p WHERE allow >="1"

そして、私はこのエラーを受け取りました

「where句」の不明な列「allow」

編集: この編集は、SQL クエリを改善するために行われました。

SELECT 
p.content,
CASE share_type 
WHEN 'public' then "1"
when 'lsit' then 
    (select count(*) from share_member WHERE username='pratik' AND share_id=share)
end as allow
FROM posts p WHERE allow=>1

エラー コード 1064、SQL 状態 42000

4

3 に答える 3

2

句では列の別名を使用できません。WHERE

ただし、HAVING代わりに句を使用できます。エイリアスを使用できます。違いはWHERE、結果セットの構築中に実行HAVINGされ、セット全体が一致した後に適用されます (つまり、一般的にHAVING重いことを意味します)。

SELECT 
p.content,
(select count(*) from share_member WHERE username='pratik' AND share_id=share) as allow 
FROM posts p
HAVING allow >= 1

編集: 2 番目のクエリは次のようになります。

SELECT p.content,
  CASE
    WHEN share_type='public' THEN "1"
    WHEN share_type='list' THEN (SELECT COUNT(*) FROM share_member WHERE username='pratik' AND share_id=share)
    END AS `allow`
FROM posts p
HAVING `allow` >= 1
于 2012-06-27T11:46:48.967 に答える
1

そのはず

SELECT p.content,
    (select count(*) 
     from share_member 
     WHERE username='pratik' AND share_id=share) as allow 
FROM posts p 
WHERE (select count(*) 
      from share_member 
      WHERE username='pratik' AND share_id=share) >=1

また

(select count(*) 
 from share_member 
 WHERE username='pratik' AND share_id=share) 

別の結果セットとして from 句にする必要があります

于 2012-06-27T11:45:29.370 に答える
0

クエリは次のように変更されます

SELECT 
p.content,
(select count(*) from share_member WHERE username='pratik' AND share_id='share') as allow 
FROM posts p WHERE allow >=1

または

SELECT 
p.content,
(select count(*) from share_member WHERE username='pratik' AND share_id='share') as allow 
FROM posts p WHERE allow >='1'
于 2012-06-27T11:53:52.167 に答える