2014-09-15 3 views
0

죄송합니다.이 질문이 정말 바보 같지만 MYSQL 구문에 익숙하지 않습니다.MYSQL - 실제 결과 항목을 잃지 않고 쿼리 결과 카운트 표시

나는 역사적으로 실행했습니다 :

USE hg19; 
SELECT DISTINCT (name2), txStart, txEnd 
FROM refGene 
WHERE name2 LIKE '[genename]'; 

하는 것 출력 모든 항목 그리고 내가 존재하지 않는 항목을 찾는 경우, 내가 (빈 얻을 것을 제외하고, 괜찮다고하는 단지 서버와 연결을 끊으면 결과가 같았습니다.) 이것은 항목이 존재하지 않는다면 실제로 발견 할 수 없었을 때 많은 다운 스트림 문제로 이어졌습니다. 존재하지 않은 경우

USE hg19; 
SELECT *, count(*) AS results 
FROM (
    SELECT DISTINCT (name2), txStart, txEnd 
    FROM refGene 
    WHERE name2 LIKE 'TP53' 
) a; 

이 이제 결과를 나에게 공을 줄 것이다 (그리고이 연결되지 않은 경우는 빈 남아있는 것) :

그래서 대신 내가 사용하기로 결정했습니다. 그러나 어떤 이유로 든 현재 어떤 항목이든 상관없이 하나의 항목 만 표시합니다 (예를 들어 TP53을 쿼리하면 두 개의 고유 항목이 있어야 함). 그러나 결과는 2 개가되지만 그 중 하나만 표시합니다. 이 문제를 해결할 방법이 있습니까? 나는 여전히 모든 별개의 결과를 표시하고 싶습니다.

답변

1

COUNT()은 행 그룹에서 작동하는 집계 함수입니다. GROUP BY 절이 없으면 MySQL은 이러한 문을 받아들이고 집계되지 않은 열에 임의의 값을 반환하고 사용자가 본 것처럼 하나의 행만 반환합니다.

이 원하는 결과를 얻으려면, 당신은 단지 당신의 "주"쿼리가 더 행을 반환하지 않는 경우

SELECT 
    a.results, 
    b.* 
FROM 
    (SELECT COUNT(*) results FROM refGene r1 WHERE a.name2 LIKE 'TP53') a 
LEFT JOIN (
    SELECT 
     * 
    FROM 
     refGene r2 
    WHERE 
     name2 LIKE 'TP53' 
) b 
ON 
    a.result IS NOT NULL; 

이 결과에서 0 (영) 열이있을 것 조인 LEFT 당신의 논리를 반전하고 사용할 수 있어요 "기본"쿼리의 열에 NULL 값이 있습니다.

+0

안녕하세요, 감사합니다, 항목이있는 경우 문제가 해결되지만 원래 문제로 돌아갑니다. 검색어를 실행해도 항목이 존재하지 않으면 존재하지 않는다는 경고가 표시됩니다. 0의 결과를 표시합니다. 이것은 내가 원했던 것입니다.) – user3412393

+0

@ user3412393. 나는 그것을 간과했다. LEFT JOIN이 필요한 것 같습니다. 편집을 참조하십시오. – VMai