업데이트 : 자신을 충분히 설명하지 않았다처럼SELECT COUNT (*) 테이블 변경 후 제대로 작동하지
그건은, 다음의 예 내 원래의 질문이 게시물의 끝에, 더 일반적인 것 같다.
제 문제는 설명서에 적어도 1을 제공해야한다고 표시 될 때 count (*)가 일부 행에서 0을 제공한다는 것입니다. 다른 사용자 reported은 v9.7 및 v11.1 모두에서 발생합니다.
사람들이 내가 말하는 것을 볼 수있는 MCVE가 있습니다.
CREATE TABLE TABLE_1
(
X INT NOT NULL PRIMARY KEY
);
CREATE TABLE TABLE_2
(
Y INT NOT NULL
);
INSERT INTO TABLE_1
VALUES (1),
(2),
(3),
(4),
(5);
INSERT INTO TABLE_2
VALUES (1),
(1),
(2);
우리가 지금이 쿼리를 할 경우 :
나는이 내 테이블을 만들
SELECT T1.X, COUNT (*) as c1
from TABLE_1 T1 left join TABLE_2 T2 on (T1.X = T2.Y)
group by T1.X;
그것은 각 매달려 튜플 이후 각 행에 대해 (C1)에 적어도 1 예상 결과를 제공 계산됩니다. 우리가 지금이와 테이블을 변경하고 (mao's comment에서 언급 한 바와 같이)는 RUNSTATS를 실행한다면
:
ALTER TABLE TABLE_2
ADD CONSTRAINT fk FOREIGN KEY (Y) REFERENCES TABLE_1 ;
RUNSTATS ON TABLE TABLE_1;
을 정확히 같은 쿼리를 실행, 지금은 다른 결과를 제공이 경우 동일한를 제공해야 결과 집합 :
SELECT T1.X, COUNT (*) as c1
from TABLE_1 T1 left join TABLE_2 T2 on (T1.X = T2.Y)
group by T1.X;
이되면 1을 제공한다 매달려 튜플에 대한 C1 제로를 제공하고이 문제이며,이 (적어도 내 생각에), 그 COUNT (*)를 의미 작동하지 않는 설명서에 나와 있습니다.
그렇지 않은 경우 실수 한 부분을 알려주십시오.
ORIGINAL POST는 :
내가 찾아 봤는데하지만 이런 일이 왜 나도 내 교수도 이해. 다음 쿼리가 있습니다 :
SELECT A.NAME, COUNT(*)
from SCHEMA_1.ACTORS A LEFT JOIN SCHEMA_2.MOVIES M on (M.PROTAGONIST = A.NAME)
GROUP BY A.NAME
여기서 NAME은 NAME을 참조하는 외래 키인 ACTORS 및 PROTAGONIST의 기본 키입니다. 또한이 두 테이블은 서로 다른 스키마에 있습니다.
이론적으로 나는 배우가 영화의 주인공 인 횟수를 얻고 싶습니다. 나는이 일을 올바른 방법이
COUNT(M.PROTAGONIST)
사용되어야한다는 것을 알고 있지만 어떤 이유로도 카운트 (*) 더 이상 것입니다 무엇 대신 1
의 튜플을 매달려 0을주고있다
SELECT A.NAME, COUNT(*), AVG(A.AGE)
from SCHEMA_1.ACTORS A LEFT JOIN SCHEMA_2.MOVIES M on (M.PROTAGONIST = A.NAME)
GROUP BY A.NAME
나이 :
SELECT A.AGE, COUNT(*)
from SCHEMA_1.ACTORS A LEFT JOIN SCHEMA_2.MOVIES M on (M.PROTAGONIST = A.NAME)
GROUP BY A.AGE
나는 이것을 작성하는 경우 결과에 count (*)가 없으면 모든 것이 예상대로 작동합니다.
왜 이런 일이 발생하는지 알고 싶습니다.
무엇을 의미합니까? 영화의 주인공이 아니었던 그 테이블에 배우가 없습니다. – Lamak
그리고'COUNT (F.PROTAGONIST) '를 사용하면 어떻게됩니까? 너는 우리에게 이것을 결코 말하지 않았다. –
@TimBiegeleisen 샘플 질의에'F' 테이블조차 없다. – Lamak