복붙노트

[SQL] LIMIT & IN / ALL / ANY / SOME 서브 쿼리에 문제가

SQL

LIMIT & IN / ALL / ANY / SOME 서브 쿼리에 문제가

나는이 쿼리를 가지고 :

SELECT count(cp.CxID) as intSmokers 
FROM CustPrimarySmoking cp 
JOIN Customer c ON cp.CxID = c.CustomerID 
WHERE 
cp.CxID IN (SELECT CxID FROM CustPrimarySmoking WHERE CxID = cp.CxID LIMIT 1, 9999)

개수가 첫 번째 레코드를 제외하고 해당 고객에 대한 모든 기록을 검색하는 중첩 된 쿼리의 결과에 따라 될 것 인 아이디어.

그러나, 나는 내가 꽤 터미널 생각이 오류를 얻을 :

사람이 일을 다른 방법을 알고 있나요?

감사

해결법

  1. ==============================

    1.이것은 당신이 진행해야하는 방법이다. 나는 밖으로 작업 한 것을 예를 참조하십시오.

    이것은 당신이 진행해야하는 방법이다. 나는 밖으로 작업 한 것을 예를 참조하십시오.

    mysql> select * from test;
    +------+-------+
    | id   | name  |
    +------+-------+
    |    1 | name1 |
    |    2 | name2 |
    |    3 | name3 |
    |    4 | name4 |
    +------+-------+
    4 rows in set (0.00 sec)
    
    mysql> select * from test1;
    +------+------+--------+
    | id   | tid  | name2  |
    +------+------+--------+
    |    1 |    2 | name11 |
    |    2 |    3 | name12 |
    |    3 |    4 | name13 |
    +------+------+--------+
    3 rows in set (0.00 sec)
    
    mysql> select
        ->  t1.name
        -> from
        ->  test t1
        -> join
        ->  test1 t2 on t2.tid = t1.id
        -> join
        ->  (select id from test where id <4 limit 3) as tempt on tempt.id = t1.id;
    +-------+
    | name  |
    +-------+
    | name2 |
    | name3 |
    +-------+
    2 rows in set (0.00 sec)
    

    도움이 되었기를 바랍니다.

  2. ==============================

    2.당신은 첫 번째를 제외, 모든 레코드를 검색 할 하위 쿼리를 사용할 필요가 없습니다 :

    당신은 첫 번째를 제외, 모든 레코드를 검색 할 하위 쿼리를 사용할 필요가 없습니다 :

    intSmokers 같은 SELECT COUNT (cp.CxID) CustPrimarySmoking의 CP FROM cp.CxID = c.CustomerID에 대한 고객 C 가입 WHERE cp.CxID> (SELECT cxID CustPrimarySmoking ORDER FROM BY cxID LIMIT 1)

    cxid 숫자라고 가정

  3. ==============================

    3.또한 이중 중첩이 제한을 해결하기 위해 내부 쿼리 볼 수 있습니다 :

    또한 이중 중첩이 제한을 해결하기 위해 내부 쿼리 볼 수 있습니다 :

    한도 문을 삭제 MYSQL

  4. ==============================

    4.당신이 "각 그룹의 상위 N 행"뭔가를 얻으려면이 제한은 고통이다. 그러나 귀하의 경우에 나는 그것이 가능하더라도 해당 기능을 사용하지 않을 것입니다. 당신은 무엇을하려고하는 것은 하나의 행 각 CxID의 제외한 모든 행을 계산하는 것입니다. 당신이 필요로하는 단지 COUNT (DISTINCT cp.CxID)는 별개의 CustomerIDs의 수를 빼기하는 것입니다. 그래서 최종 쿼리는 간단해야한다 :

    당신이 "각 그룹의 상위 N 행"뭔가를 얻으려면이 제한은 고통이다. 그러나 귀하의 경우에 나는 그것이 가능하더라도 해당 기능을 사용하지 않을 것입니다. 당신은 무엇을하려고하는 것은 하나의 행 각 CxID의 제외한 모든 행을 계산하는 것입니다. 당신이 필요로하는 단지 COUNT (DISTINCT cp.CxID)는 별개의 CustomerIDs의 수를 빼기하는 것입니다. 그래서 최종 쿼리는 간단해야한다 :

    SELECT count(cp.CxID) - count(DISTINCT cp.CxID) as intSmokers 
    FROM CustPrimarySmoking cp
    
  5. from https://stackoverflow.com/questions/5004129/problem-with-limit-in-all-any-some-subquery by cc-by-sa and MIT license