Mysql SQL查询只返回一行,连接三个以上表的正确方法是什么?
我在做这个酒店预订系统 我有多张桌子供客人、预订、账单、房间、房间类型、代理使用 我在开收据 所有这些表都是连接的,但我只得到一行信息,而不是三个收据信息 我只是一个初学者,所以如果我的问题没有那么复杂或经验不足,请容忍我 顺便说一句,我用的是sqlfiddle 我的问题是:Mysql SQL查询只返回一行,连接三个以上表的正确方法是什么?,mysql,sql,database,fiddle,Mysql,Sql,Database,Fiddle,我在做这个酒店预订系统 我有多张桌子供客人、预订、账单、房间、房间类型、代理使用 我在开收据 所有这些表都是连接的,但我只得到一行信息,而不是三个收据信息 我只是一个初学者,所以如果我的问题没有那么复杂或经验不足,请容忍我 顺便说一句,我用的是sqlfiddle 我的问题是: SELECT r.bill_ID , c.name , b.payment_type , b.card_number , a.agency_name , mt.descri
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),
agency_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),
cust_ID varchar(15),
room_ID varchar(15),
agency_ID varchar(15),
check_in date,
check_out date,
num_guest int,
book_status varchar(10),
FOREIGN KEY (agency_ID) REFERENCES agency(agency_ID),
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),
bill_ID varchar(15),
room_ID varchar(15),
cust_ID varchar(15),
FOREIGN KEY (cust_ID) REFERENCES customer(cust_ID),
FOREIGN KEY (rsrvtn_ID) REFERENCES reservation(rsrvtn_ID),
FOREIGN KEY (bill_ID) REFERENCES bill(bill_ID),
FOREIGN KEY (room_ID) REFERENCES room(room_ID));
您的查询有一个SUM()
,这使它成为一个聚合查询。不带分组依据的聚合查询只返回一行。或者是一个错误
您的查询应该返回一个错误。为什么?SELECT
列与groupby
列不一致。所有未聚合的列都应在分组中,按
:
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以来,这不再是默认行为。它由系统设置
仅由
控制,这在。您使用的是哪个sqlfiddle dbms?连接看起来很好,但是SUM()使您在最后需要一个GROUP BY。或者使用一个窗口函数。让它变得简单和可能,以帮助您:。我使用的是MySQL 5.6。这里没有证据表明存在任何问题。您需要显示表架构、示例数据、所需输出、当前输出,以及它们之间的差异/问题的解释。