2016-11-29 12 views
1

私はSQLで初めてで、他の記事を読むことを学んだことの1つは、FORループの構文がSQLにないことと、何とかそれをエミュレートしようとするのは良い方法ではないということです。FORループのSQL置換

私はこの問題を繰り返しています。テーブルには2列のfav_retail_iduser_idがあります。最初の列にはお気に入りの間に追加された小売りが、2番目には小売店をお気に入りに追加したユーザーが表示されます。

ここで、お気に入りの小売のうち、ID = 42の小売をいくつのユーザーが持っているかを知りたいと思います。私は次のように書きました。

select count(id) from favorite_retails 
where retail_id = 42 

これはかなりうまくいくようです。今私の主張は、ID = 31,54,98などの他の小売店でも同じことをしたいということです。

この情報を繰り返し取得する方法はありますか?サポートのため おかげで、A.

+0

によってフィルタでシンプルなgroup byを使用することができます 'IN'キーワードを見てください:http://www.w3schools.com/sql/sql_in.asp –

+0

SQLは宣言型言語であります - あなたは 'what 'に焦点を当て、' how'には焦点を当てません。 –

+0

'favorite_retails'テーブルに希望の' retail_id'を含むテーブルを 'right join 'することもできます。これはおそらく 'in'キーワードの後に​​1つ以上のidがある場合に必要なものです。 –

答えて

5

あなたは、group byを使用します。あなたがのための答えをしたい場合

select retail_id, count(id) 
from favorite_retails 
where retail_id in (31, 54, 98) 
group by retail_id; 

whereを削除しますすべてretail_id s。

1

はい:あなたは、各1のための答えをしたい場合

select count(id) from favorite_retails 
where retail_id in (31, 54, 98) 
2

SQLは通常、セットベースの操作に関するものであり、反復操作についてはほとんどありません。あなたのケースでは、retail_id

select 
    retail_id, 
    count(id) 
from favorite_retails 
where 
    retail_id in (31, 54, 98) 
group by 
    retail_id