2011-01-31 4 views
2

2つの異なる列から別個の値を選択できますが、それらを数える方法はわかりません。 私はエイリアスを使うべきですが、文を正しく書く方法を理解できないと思います。SQLユニオンで異なる値を数えるには?

$sql = "SELECT DISTINCT author FROM comics WHERE author NOT IN 
       (SELECT email FROM bans) UNION 
       SELECT DISTINCT email FROM users WHERE email NOT IN 
       (SELECT email FROM bans) "; 

EDIT1:私はPHPでmysql_num_rows()を使用できることを知っているが、私はそれがあまりにも多くの処理を要すると思います。

答えて

12

あなたはサブクエリでクエリをラップすることができます:

select count(distinct author) 
from (
     SELECT author 
     FROM comics 
     WHERE author NOT IN (SELECT email FROM bans) 
     UNION ALL 
     SELECT email 
     FROM users 
     WHERE email NOT IN (SELECT email FROM bans) 
     ) as SubQueryAlias 

あり、クエリで2つのdistinct sがなかった、とunionは、重複を除外します。私は3つすべてを削除しました(非別の組合はunion allです)、そして外見をcount(distinct author)で移動しました。

+0

そして、 'select count(distinct something)'を使い、何かに著者と電子メールの両方をエイリアスします。 – chx

+0

@chx:共用体の最上部が列名を決定します。この場合、列の名前は 'author' – Andomar

+0

UNION" ALL "+1になります。 – hasan83

3

いつでもSELECT COUNT(*) FROM (SELECT DISTINCT...) xを実行して、UNIONを2番目のSELECTにコピーすることができます(正確には匿名ビューと呼ばれます)。

+0

私は同様のことをやろうとしましたが、両方のテーブルに現れる値段があるので、2度カウントされるので、1度だけカウントする必要があります。 – grizwako

関連する問題