1

table1.user列とtable1.site列を持つtable1がある場合、サイトのリストのすべてにアクセスできる個別のユーザーのリストを返すにはどうすればよいですか?

はっきりさせておきます。私は次のコードから始めることができます:

    SELECT  DISTINCT user
    FROM    table1
    WHERE   (site IN ('site1','site2','site3'))

もちろん、これにより、リストされている3つのサイトのいずれかにエントリを持つすべての個別のユーザーが表示されます。リストされている3つのサイトすべてのエントリを持つユーザーのみが必要です。

これを行うにはおそらく明らかな方法があるように感じます。誰かがそれを指摘すると、私はおそらくかなり愚かになるでしょう。それでも、私は空白を描いています。

4

2 に答える 2

2
SELECT  user
FROM    table1
WHERE   site IN ('site1','site2','site3')
GROUP BY user
HAVING count(*) = 3

これは、ユーザーを同じサイトに複数回割り当てることができないことを前提としています。そうでない場合は、ゴードンのコメントが当てはまり、having式を次のように置き換える必要があります。HAVING count(distinct site) = 3

サイトが1回だけ指定され、count()が自動的に調整される、より動的なアプローチは次のようになります。

WITH sites (site_name) AS (
   VALUES ('site1'), 
          ('site2'),
          ('site3')
)
SELECT  user
FROM    table1
WHERE   site IN (SELECT site_name FROM sites) 
GROUP BY user
HAVING count(*) = (select count(*) from sites);

(DBMSが指定されていないため、これはANSI SQLです)

于 2012-06-20T14:00:38.693 に答える
0

これはほとんどのDBMSで機能するはずです。

select user from table1
where site in ('site1', 'site2', 'site3')
group by user
having count(distinct site) = 3

3サイトの数(この場合)をin条項にリストされているサイトの数と一致させる必要があることに注意してください。

于 2012-06-20T14:09:16.970 に答える