如何解决SQL 查询仅返回 1 行,连接三个以上表的正确方法是什么?
我正在研究这个酒店预订系统。
我有多个表用于客户、预订、账单、房间、房间类型、代理。
我正在制作收据。
所有这些表都是相连的,但我只得到一行信息,而不是三个收据信息。
我只是一个初学者,所以如果我的查询不够复杂或经验不足,请耐心等待。
顺便说一句,我正在使用 sqlfiddle。
这是我的查询:
SELECT r.bill_ID,c.name,b.payment_type,b.card_number,a.agency_name,mt.description,SUM(x.fee) Amenities,mt.room_rate Room
FROM reservation r
JOIN bill b
ON b.bill_ID = r.bill_ID
JOIN agency a
ON a.agency_ID = r.agency_ID
JOIN room m
ON m.room_ID = r.room_ID
JOIN amenities x
ON b.amenity_ID = x.amenity_ID
JOIN customer c
ON c.cust_ID = r.cust_ID
JOIN roomType mt
ON mt.type_ID = m.type_ID;
这是我的桌子:
CREATE TABLE roomType(
type_ID varchar(15) PRIMARY KEY,description varchar(45),room_rate int);
CREATE TABLE amenities(
amenity_ID varchar(15) PRIMARY KEY,amenity_name varchar(45),fee decimal(4,1));
CREATE TABLE agency(
agency_ID varchar(15) PRIMARY KEY,agency_name varchar(45));
CREATE TABLE customer(
cust_ID varchar(15) PRIMARY KEY,name varchar(45),address varchar(45),contact_no varchar(45),email varchar(45),agency_ID varchar(15),FOREIGN KEY (agency_ID) REFERENCES agency(agency_ID));
CREATE TABLE bill(
bill_ID varchar(15) PRIMARY KEY,cust_ID varchar(15),amenity_ID varchar(15),payment_type varchar(5),card_number int,amount int,FOREIGN KEY (agency_ID) REFERENCES agency(agency_ID),FOREIGN KEY (amenity_ID) REFERENCES amenities(amenity_ID),FOREIGN KEY (cust_ID) REFERENCES customer(cust_ID));
CREATE TABLE room(
room_ID varchar(15) PRIMARY KEY,type_ID varchar(15),room_num int,max_guest int,availability varchar(15),FOREIGN KEY (type_ID) REFERENCES roomType(type_ID));
CREATE TABLE reservation(
rsrvtn_ID varchar(15) PRIMARY KEY,bill_ID varchar(15),room_ID varchar(15),check_in date,check_out date,num_guest int,book_status varchar(10),FOREIGN KEY (bill_ID) REFERENCES bill(bill_ID),FOREIGN KEY (cust_ID) REFERENCES customer(cust_ID),FOREIGN KEY (room_ID) REFERENCES room(room_ID));
CREATE TABLE administrator(
admin_ID varchar(15) PRIMARY KEY,admin_lvl varchar(15),rsrvtn_ID varchar(15),FOREIGN KEY (rsrvtn_ID) REFERENCES reservation(rsrvtn_ID),FOREIGN KEY (room_ID) REFERENCES room(room_ID));
解决方法
您的查询有一个 SUM()
,这使其成为聚合查询。没有 GROUP BY
的聚合查询只返回一行。或者错误。
您的查询应该返回错误。为什么? SELECT
列与 GROUP BY
列不一致。所有未聚合的列都应该在 GROUP BY
:
GROUP BY r.bill_ID,c.name,b.payment_type,b.card_number,a.agency_name,mt.description,mt.room_rate
这是常识。大多数数据库都需要它。它甚至是 MySQL 支持的当前版本。
不幸的是,MySQL 曾经支持您问题中的语法。从 MySQL 8.0 开始,这不再是默认行为。它由系统设置 only_full_group_by
控制,这在 documentation 中有说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。