2016-06-01 7 views
0
SELECT DISTINCT CONCAT('TOTAL NUMBER OF LEGS IN A TRIP NUMBER ', T1.TNUM, ' IS NOT EQUAL TO THE LARGEST NUMBER OF LEG IN THE TRIP') AS 'ERR' 
FROM TRIPLEG T1 
WHERE MAX(T1.LEGNUM) = (SELECT COUNT(T2.TNUM) 
        FROM TRIPLEG 
        WHERE T1.TNUM = T2.TNUM); 

私のコードで、私は次の整合性制約に違反するすべてのトリップを見つけようとしています。 各旅の最後の脚が旅行中に脚の合計数と同じでなければならない」エラー111、グループ機能の無効な使用

CREATE TABLE TRIPLEG(
TNUM DECIMAL(10)  NOT NULL, 
LEGNUM DECIMAL(2) NOT NULL, 
DEPARTURE VARCHAR(30) NOT NULL,  DESTINATION VARCHAR(30) NOT NULL, 
    CONSTRAINT TRIPLEG_PKEY PRIMARY KEY (TNUM, LEGNUM), 
    CONSTRAINT TRIPLEG_UNIQUE UNIQUE(TNUM, DEPARTURE, DESTINATION), 
CONSTRAINT TRIPLEG_FKEY1 FOREIGN KEY (TNUM) REFERENCES TRIP(TNUM)); 

INSERT INTO TRIPLEG VALUES(1, 1, 'Sydney', 'Melbourne'); 
INSERT INTO TRIPLEG VALUES(1, 2, 'Melbourne', 'Hobart'); 
+0

あなたは、where句で集計関数を使用している: 'MAX (T1.LEGNUM) 'あなたはできません。私は' GroupBy'と 'Having'を提案します... – Codexer

答えて

0

次試してみてください;)

SELECT DISTINCT CONCAT('TOTAL NUMBER OF LEGS IN A TRIP NUMBER ', T1.TNUM, ' IS NOT EQUAL TO THE LARGEST NUMBER OF LEG IN THE TRIP') AS 'ERR' 
FROM TRIPLEG T1 
GROUP BY T1.TNUM 
HAVING COUNT(T1.TNUM) <> MAX(T1.LEGNUM) 
+1

それは働いています! –

関連する問題