簡體   English   中英

SQL查詢僅返回一個結果/行,而不是全部

[英]SQL Query is only returning one result/row rather than all

我有一個復雜的sql查詢,該查詢將返回選定汽車給出的所有評論,但是,我只看到如下所示的一個,而不是如屏幕快照2所示的所有評論。

屏幕截圖一

應該顯示carID one中的所有汽車,您可以在其中看到所有評論

這是我的DDL

CREATE TABLE carsType(
    carsTypeID INTEGER NOT NULL AUTO_INCREMENT,
    carsTypeName VARCHAR(200) NOT NULL,
    PRIMARY KEY(carsTypeID)
);

CREATE TABLE carCategoryType(
    carCategoryTypeID INTEGER NOT NULL AUTO_INCREMENT,
    carCategoryTypeName VARCHAR(200) NOT NULL,
    PRIMARY KEY(carCategoryTypeID)
);

CREATE TABLE cars(
    carID INTEGER NOT NULL AUTO_INCREMENT,
    carsTypeID INTEGER NOT NULL,
    carCategoryTypeID INTEGER NOT NULL,
    carName VARCHAR(200),
    carArea VARCHAR(200),
    FOREIGN KEY(carsTypeID) REFERENCES carsType(carsTypeID),
    FOREIGN KEY(carCategoryTypeID) REFERENCES carCategoryType(carCategoryTypeID),
    PRIMARY KEY(carID)
);

CREATE TABLE carsReview(
    carID INTEGER NOT NULL,
    carMileage INTEGER NOT NULL,
    reviews VARCHAR(200) NOT NULL,
    FOREIGN KEY(carID) REFERENCES cars(carID)
);

INSERT INTO carsType VALUES
(NULL, "Hatchback"),
(NULL, "Saloon"),
(NULL, "Sedan");

INSERT INTO carCategoryType VALUES
(NULL, "A"),
(NULL, "B"),
(NULL, "C");

INSERT INTO cars VALUES
(NULL, 1, 1, "Golf", "Germany"),
(NULL, 2, 2, "Ford", "USA"),
(NULL, 2, 2, "Pontiac", "USA");

INSERT INTO carsReview VALUES
(1, 10000, "Good clean car"),
(2, 3000, "Worth it"),
(3, 1000, "Brand spanking new"),
(1, 45000, "She is good"),
(1, 100000, "Gone son"),
(1, 23000, "Looking fine");

這是我的復雜SQL查詢:

SELECT tbl_cars.carID, tbl_cars.carName, tbl_cars.carArea, 
        (IFNULL(tbl_carsReview.averageMileage, 0.0)) AS finalaverageMileage , tbl_carsReview.reviews, tbl_carsType.carsTypeName, 
        tbl_carCategoryType.carCategoryTypeName
        FROM cars tbl_cars
        INNER JOIN carsType tbl_carsType ON
        tbl_cars.carsTypeID = tbl_carsType.carsTypeID 
        INNER JOIN carCategoryType tbl_carCategoryType ON
        tbl_cars.carCategoryTypeID = tbl_carCategoryType.carCategoryTypeID
        LEFT JOIN (SELECT carsReview.carID, ROUND(AVG(carsReview.reviews),1) AS averageMileage, carsReview.reviews
        FROM carsReview) tbl_carsReview
        ON tbl_cars.carID = tbl_carsReview.carID 
        WHERE tbl_cars.carID = 1

僅返回一個結果,而不是來自匹配<code> carID 1 </ code>的<code> carsReview </ code>的所有結果

這是我的sqlfiddlehttp : sqlfiddle /8

您在子查詢中缺少group by

SELECT tbl_cars.carID, tbl_cars.carName, tbl_cars.carArea, 
       (IFNULL(tbl_carsReview.averageMileage, 0.0)) AS finalaverageMileage ,
       tbl_carsReview.reviews, tbl_carsType.carsTypeName, 
       tbl_carCategoryType.carCategoryTypeName
FROM cars tbl_cars INNER JOIN
     carsType tbl_carsType
     ON tbl_cars.carsTypeID = tbl_carsType.carsTypeID INNER JOIN
     carCategoryType tbl_carCategoryType
     ON tbl_cars.carCategoryTypeID = tbl_carCategoryType.carCategoryTypeID LEFT JOIN
     (SELECT carsReview.carID, ROUND(AVG(carsReview.reviews),1) AS averageMileage, carsReview.reviews
      FROM carsReview
      GROUP BY carsReview.carID
------^
     ) tbl_carsReview
     ON tbl_cars.carID = tbl_carsReview.carID 
WHERE tbl_cars.carID = 1;

編輯:

如果您需要評論平均值,則需要另外join

SELECT tbl_cars.carID, tbl_cars.carName, tbl_cars.carArea, 
       (IFNULL(tbl_carsReviewAvg.averageMileage, 0.0)) AS finalaverageMileage ,
       tbl_carsReview.reviews, tbl_carsType.carsTypeName, 
       tbl_carCategoryType.carCategoryTypeName
FROM cars tbl_cars INNER JOIN
     carsType tbl_carsType
     ON tbl_cars.carsTypeID = tbl_carsType.carsTypeID INNER JOIN
     carCategoryType tbl_carCategoryType
     ON tbl_cars.carCategoryTypeID = tbl_carCategoryType.carCategoryTypeID LEFT JOIN
     (SELECT carsReview.carID, ROUND(AVG(carsReview.reviews),1) AS averageMileage, carsReview.reviews
      FROM carsReview
      GROUP BY carsReview.carID
     ) tbl_carsReviewAvg
     ON tbl_cars.carID = tbl_carsReviewAvg.carID LEFT JOIN
     carsReview tbl_carsReview
     ON tbl_cars.carID = tbl_carsReview.carID
WHERE tbl_cars.carID = 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM