2011-02-15 3 views
0

나는 고객을 보유한 테이블과 해당 고객의 결과를 보유하고있는 테이블을 보유하고 있습니다.처음부터 제외한 모든 레코드 선택

한 고객이 여러 가지 결과를 낼 수 있습니다.

나는

내가 지금까지이 ... firsly CustResults에서 하나 개 이상의 항목이 다음 것과, 내가 처음 하나를 제외한 모든 레코드를하려는 경우에만 고객을 선택할 수 있도록하려면 , 하나 이상의 결과를 가진 고객을 검색하지만, 첫 번째 결과를내는 방법을 모른다.

SELECT * FROM CustResults cp 
JOIN Customer c ON c.CustomerID = cp.CustomerID 
WHERE 
(SELECT count(CustomerID) as cpid 
FROM CustResults WHERE CustomerID = cp.CustomerID GROUP BY CxID) > 1 

리타 : 결과 1 고소 : 결과 (1), (3) 결과,이 결과 결과 4 밥 : 만 고소하고 싶어 3

결과 1, 2, 결과, 결과 Bob은 리타가 한 가지 결과만을 가지고 있기 때문에 Sue와 Bob이 결과를보고 싶습니다. 2,3,4

아이디어가 있습니까? 내 정확한 쿼리 여기

: cp.CxID ON 고객 C를

SELECT COUNT (cp.CxID) CustPrimarySmoking의 CP FROM intSmokers 로 가입

감사

는 더 많은 정보 추가 = c.CustomerID WHERE (SELECT 수 (CustPrimarySmokingID) as cqpid FROM CustPrimarySmoking WHERE CxID = cp.CxID GROUP BY CxID)> 1

쿼리가 하나의 값 (개수) 만 반환하기 때문에 분명히 LIMIT 1, 99999를 사용할 수 있습니다.

CustPrimarySmoking에서 둘 이상의 레코드가 있지만 첫 번째 항목을 무시한 고객을 사용하려고합니다.

더 많은 아이디어가 있습니까?

답변

2

바보와 그리 유연하지 않습니다 (하지만, 정상적으로는 작동하는 모든 대부분의 시간) ...

LIMIT 1, 999999999; 
     ^to ensure all rows are returned 
0

쿼리의 끝에 "1 OFFSET"추가하려고 있나요?

0

실제 레코드가 아닌 모든 레코드가있는 경우 이미 보유하고있는 레코드 수에서 고객 수를 뺍니다 (즉 각 레코드를 적어도 하나의 레코드로 확인 했으므로)

SELECT count(cp.CxID)-count(DISTINCT cp.CxID) as intSmokers 
FROM CustPrimarySmoking cp 
JOIN Customer c ON cp.CxID = c.CustomerID 
WHERE (
    SELECT count(CustPrimarySmokingID) as cqpid 
    FROM CustPrimarySmoking WHERE CxID = cp.CxID 
    GROUP BY CxID 
) > 1 

경우 실제 행 후, 어떻게 이것에 대해입니다 그러나 :

SELECT * FROM Customer; 
    +------------+------+ 
    | CustomerID | name | 
    +------------+------+ 
    |   1 | Rita | 
    |   2 | Sue | 
    |   3 | Bob | 
    |   4 | Jack | 
    +------------+------+ 


    SELECT * FROM CustPrimarySmoking; 

    +----------------------+------+-------------------+ 
    | CustPrimarySmokingID | CxID | result   | 
    +----------------------+------+-------------------+ 
    |     1 | 1 | Result 1 for Rita | 
    |     2 | 2 | Result 1 for Sue | 
    |     3 | 2 | Result 2 for Sue | 
    |     4 | 2 | Result 3 for Sue | 
    |     5 | 2 | Result 4 for Sue | 
    |     6 | 3 | Result 1 for Bob | 
    |     7 | 3 | Result 2 for Bob | 
    |     8 | 3 | Result 3 for Bob | 
    +----------------------+------+-------------------+ 

    SELECT * FROM CustPrimarySmoking cp 
    JOIN Customer c ON cp.CxID = c.CustomerID 
    WHERE CustPrimarySmokingID <> (
     SELECT CustPrimarySmokingID 
     FROM CustPrimarySmoking 
     WHERE CxID = cp.CxID ORDER BY CustPrimarySmokingID LIMIT 1 
    ); 


    +----------------------+------+------------------+------------+------+ 
    | CustPrimarySmokingID | CxID | result   | CustomerID | name | 
    +----------------------+------+------------------+------------+------+ 
    |     3 | 2 | Result 2 for Sue |   2 | Sue | 
    |     4 | 2 | Result 3 for Sue |   2 | Sue | 
    |     5 | 2 | Result 4 for Sue |   2 | Sue | 
    |     7 | 3 | Result 2 for Bob |   3 | Bob | 
    |     8 | 3 | Result 3 for Bob |   3 | Bob | 
    +----------------------+------+------------------+------------+------+ 
관련 문제