2016-12-13 4 views
0

私は例外をスローすると思うMySQLのクエリを持っていますが、それはしませんでした。クエリは次のとおりです。サブクエリが期待通りに機能しないIN句

select count(distinct uid) 
from nov_visit_20161201 
where pv_listen>0 
and uid in (select distinct uid from nov_visit_20161120 where pv_listen>0); 

問題がpv_listen列を持っていますが、クエリがうまく働いていないnov_visit_20161120テーブルです。サブクエリを単独で実行すると、次のようになります。 "不明な列 'pv_listen' in 'where clause'"。

誰でも私にその理由を教えていただけますか?

+0

外部クエリは別のテーブルを参照し、別のテーブルを参照し、内部テーブルが参照するテーブルにはそのカラムがありません。それで、なぜ1つが動作し、1つが動作しないのですか –

+2

そのテーブルに参照しているカラムがなく、それを知っていたら、何が問題なのですか? –

+0

@ハンキーパンキー、私はエラーがあるはずだと思うが、いいえ、なぜ知りたいのですか?@ Sumit Guptaの答えは正しいです。 – madtracy

答えて

0

列がテーブルに存在しない場合は、単にWHERE条件から削除:私は同じことを数回観察してい

select count(distinct uid) 
from nov_visit_20161201 
where pv_listen>0 
and uid in (select distinct uid from nov_visit_20161120); 
+0

私の場合、テーブルnov_visit_20161120のpv_listenカラムを追加するだけでいいのですが、なぜか分かりたいのです。@ Sumit Guptaの答えは正しいです。 – madtracy

1

、説明はサブクエリでpv_listenであることを、することができメインクエリテーブルを参照します。

メインクエリ列の値を使用するサブクラスを実行したい場合、どのように書き込むかを検討してください。あなたは単純に列の名前をサブクエリに入れ、データ行の列の値がそこに使われます。したがって、サブクエリテーブル/データセットにカラムが見つからない場合、そのカラムはメインクエリに属しているとみなされ、あなたのケースでは同じものが見つかりました。したがってエラーは発生しません。 sub queryでフィルタが任意のレコードをフィルタリングしていないので

だから、それは実際に

select count(distinct uid) 
from nov_visit_20161201 
where pv_listen>0 
and uid in (select distinct uid from nov_visit_20161120); 

として、それを実行しています。

+0

あなたの答えをありがとう、私はいくつかのテストを行った、私はあなたの答えは正しいと思います。 – madtracy

関連する問題