9

以下は、fittest と呼ばれる私のテーブルです。学生 ID (studid) に基づいて、prepost 列で指定された pre および post テストを受けた学生を見つける必要があります。したがって、以下の簡単な表に基づいて、スタディッド 123456 を返す必要があります。このための SELECT クエリをどのように作成すればよいでしょうか?

SQL query: SELECT studid, prepost FROM `fittest` LIMIT 0, 30 ; 

    studid  prepost
    123456  pre
    123456  post
    1031460 pre
4

9 に答える 9

5

試す

SELECT studid
  FROM fittest
 GROUP BY studid
HAVING COUNT(DISTINCT prepost) = 2

preまたは、正確に1行と1行を持つIDのみを確保したい場合は、post次のように強制できます

SELECT studid
  FROM fittest
 GROUP BY studid
HAVING (MAX(prepost = 'pre' ) + 
        MAX(prepost = 'post')) = 2
   AND COUNT(DISTINCT prepost) = 2

出力:

| | スタディ |
----------
| | 123456 |

これは両方のクエリのSQLFiddleデモです

于 2013-07-23T07:27:14.750 に答える
4

JOIN について:

select s1.studid, s1.prepost, s2.prepost
from fittest s1
inner join fittest s2
    on s1.studid = s2.studid
where s1.prepost = 'pre' 
  and s2.prepost = 'post'
于 2013-07-23T07:31:27.347 に答える
0

試す:

    select f1.studid
       from fittest f1
       inner join fittest f2
         on f1.studid = f2.studid
    where f1.prepost = 'pre' and f2.prepost = 'post'

ここにSQLフィドルがあります

于 2013-07-23T07:27:00.687 に答える
0

実際の主キーに応じて、次を使用します。

SELECT studid
FROM fittest
WHERE prepost = 'pre' OR prepost = 'post'
GROUP BY studid
HAVING COUNT(DISTINCT prepost) = 2
于 2013-07-23T07:27:23.063 に答える
0
SELECT t1.studid
FROM fittest t1
INNER JOIN t2 ON t1.studid=t2.studid
WHERE t1.prepost = 'pre'
AND t2.prepost='post'
于 2013-07-23T07:27:35.923 に答える
0

この列で PRE と POST のみが可能な場合は、試してください

SELECT studid FROM fittest group by studid
HAVING Min(prepost)<>max(prepost)
于 2013-07-23T07:27:43.380 に答える
0
SELECT 
studid 
FROM `fittest` 
where prepost = 'pre' 
or prepost = 'post'
group by studid
having count(distinct prepost)=2

余分なレコードを使用したSQL Fiddle 。

于 2013-07-23T07:27:49.043 に答える
0

あなたが使用することができますJOIN

SELECT a.studid 
FROM fittest a 
JOIN fittest b 
    ON a.studid=b.studid 
        and a.prepost like 'pre' 
        and b.prepost like 'post'
于 2013-07-23T07:30:07.797 に答える
-1

Select .... where study in (123456,123457,...)

于 2013-07-23T07:26:01.070 に答える