2013-05-15 3 views
0

제 질문은 this StackOverflow question과 매우 비슷하며 분명히 학습 SQL에서는 common issue입니다. 본질적으로, 기존 테이블 필드를 사용하여 min() 값을 찾으려고합니다. 일반적인 해결책은 다소 자체 참조하는 하위 쿼리를 만드는 것입니다. 나는 내 위의 예에서이 코드를 복사 한 : 내 예에서기존 SQL 쿼리를 기반으로하는 최소값에 대한 자체 조인 사용

select * 
from yourtable t1 
inner join 
(
    select min(A) A, id 
    from yourtable 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.A = t2.A 

그러나, 나는 예에 나와있는 하위 쿼리를 사용하여 작동하지 않습니다 있도록 내 SQL 쿼리에 다른 조건의 무리가 . 다른 말로하면, 적절한 쿼리 결과를 얻기 위해 보존하고 사용해야하는 다양한 인수가있는 기존 쿼리가 있습니다. 내가의 기반으로 결과에 존재하지 않는 분 값을 선택하는 것입니다 첫 번째 예제에 나와 일을한다면

select * 
from yourtable t1 
inner join 
(
    select min(A) A, id 
    from *my existing query results* 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.A = t2.A 

: 나는 효과적으로 이렇게 몇 가지 새로운 코드를 연결해야합니다 쿼리에 이미 존재하는 다른 조건.

기존 쿼리가 아래에 링크되어 있습니다. 이것은 uc_catalog 뷰를 사용하여 Drupal 7의 Views 모듈에 의해 생성 된 쿼리이다. 내 변경 사항을 적용하려면 hook_views_query_alter()을 사용하고 있습니다. MYSQL 데이터베이스를 사용하고 있습니다.


편집 : 내가 할 노력하고있어 아마도 더 나은 설명을 기존 쿼리에 와이즈 최소 작업을 첨부하고 조건이 와이즈 작업 내에서 사용하는 WHERE 그것의 이상 복사하는 것입니다. 어떻게해야합니까 보여줄 수 this in this query?

+0

'A (최소) (A) A, id FROM ... GROUP BY ID'는 'A'가 집계되거나 GROUP-BY에 나열되어 있지 않으므로 대부분의 SQL 구현에서는 불법입니다. 명부. MySql 테이블 확장은 그러한 구문을 허용하지만 결과는 예측할 수 없습니다. –

+0

@PM'A'는 집계 된 결과의 별칭입니다. 그것은 단지 멋지고 멋쟁이 다. – Strawberry

+0

@Strawberry - 오른쪽. 알아 차렸어 야 했어. –

답변

0
select * 
from (my existing query) t1 
inner join 
(
    select min(A) A, id 
    from (my existing query)x 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.A = t2.A 
+0

나는 질문을 잘못하고 있다고 생각합니다. 이 코드 스 니펫은 제가 성취하고자하는 것을 추상화 한 것입니다. 나는 개인적으로 해결책이 어떤 종류의'에서 올 것이라고 생각한다. existing_query.id = (SELECT id FROM 테이블 A = min (A)' – kevinaskevin

+0

글쎄, 나는 항상 새로운 기술을 배우려고 열심이다. 문제가 덜 추상적 인 문제를 설명하는 것을 고려해보십시오. – Strawberry

+0

내 어휘가 내 작품을 따라 잡을 때 내 질문은 덜 추상화 될 것입니다 - 나는 확신합니다! 나는 특정 예제와 시도한 두 가지를 내 Pastebin http : //pastebin.com/G6DM1r8Q – kevinaskevin