我的数据库中有这些表:
游客 - 这是第一张表
Tourist_ID - primary key
Extra_Charge_ID - foreign key
name...etc...
EXTRA_CHARGES
Extra_Charge_ID - primmary key
Excursion_ID - foreign key
Extra_Charge_Description
Tourist_Extra_Charges
Tourist_Extra_charge_ID
Extra_Charge_ID - foreign key
Tourist_ID - foreign key
预订
Reservation_ID - primary key
.....
Tourist_Reservations
Tourist_Reservation_ID
Reservation_ID - foreign key
Tourist_ID - foreign key
所以这是我的例子:我已经预约Reservaton_ID
- 27
这项预订有两位游客Tourist_ID
- 86和Tourist_ID
- 87这位名为86的游客在Extra_Charge_ID
- 7和Extra_charge_ID
- 11;
是否可以进行sql查询以及游客的名称和id然后全部 额外费用
所以输出可能如下所示:
Tourist_ID : 86 Name:John Extra_Charge_ID - 7 Extra_Charge_ID - 11
Tourist_ID: 87 Name:Erika
Extra-Charge_ID:10
(这是我为了获得所有预订_ID = 27的游客的extra_charge_description所做的查询,但我不知道如何更改它。获取上面的名字)
Select EXTRA_CHARGES.Extra_Charge_Description,TOURIST_EXTRA_CHARGES.Tourist_ID FROM EXTRA_CHARGES
INNER JOIN TOURIST_EXTRA_CHARGES on EXTRA_CHARGES.Extra_Charge_ID = TOURIST_EXTRA_CHARGES.Extra_Charge_ID
INNER JOIN TOURIST_RESERVATION on TOURIST_EXTRA_CHARGES.Tourist_ID = TOURIST_RESERVATION.Tourist_ID
INNER JOIN RESERVATIONS on RESERVATIONS.Reservation_ID = TOURIST_RESERVATION.Reservation_ID
where RESERVATIONS.Reservation_ID=27
答案 0 :(得分:2)
您的数据库架构并不完全清楚,但似乎您可以通过旅游表中的游客与 EXTRA_CHARGES 表中的额外费用相关联> Tourist_Extra_Charges 这样的表:
SELECT T.Tourist_ID
,T.Tourist_Name
,EC.Extra_Charge_ID
,EC.Extra_Charge_Description
FROM Tourist AS T
INNER JOIN Tourist_Extra_Charges AS TEC ON T.Tourist_ID= TEC.Tourist_ID
INNER JOIN EXTRA_CHARGES AS EC ON TEC.Extra_Charge_ID = EC.Extra_Charge_ID;
修改强>
如果您希望能够对 Reservation_ID 进行过滤,则您必须同时加入 Tourist_Reservations 和预订表格,像这样:
SELECT T.Tourist_ID
,T.Tourist_Name
,EC.Extra_Charge_ID
,EC.Extra_Charge_Description
FROM Tourist AS T
INNER JOIN Tourist_Extra_Charges AS TEC ON T.Tourist_ID= TEC.Tourist_ID
INNER JOIN EXTRA_CHARGES AS EC ON TEC.Extra_Charge_ID = EC.Extra_Charge_ID
INNER JOIN Tourist_Reservations AS TR ON T.Tourist_ID = TR.Tourist_ID
INNER JOIN Reservations AS R ON TR.Reservation_ID = R.Reservation_ID
WHERE R.Reservation_ID = 27;
关于您的数据库架构:请注意旅游表中不需要 Extra_Charge_ID 字段:您已经通过 Tourist_Extra_Charges将游客与额外费用相关联表。对于数据的健全性来说,建立这种双重连接可能是危险的。
答案 1 :(得分:1)
您可以将其与GROUP_CONCAT
分隔在列表中,例如:
SELECT Tourist_ID, Name, GROUP_CONCAT(Extra_Charge_ID SEPARATOR ',')
FROM Tourist
GROUP BY Tourist_ID
答案 2 :(得分:0)
你写道:
“这名身份为86的游客额外收取Extra_Charge_ID - 7和Extra_charge_ID - 11;”
但是您的Tourist表确实将Tourist_ID作为主键,因此您将无法使用两个不同的Extra_Charge_ID插入旅游者86.
解决方案是从Tourist表中删除Extra_Charge_ID。
你已经有了Tourist_Extra_Charges,为什么不使用它?
Tourist
-------
86
87
和
Tourist_Extra_Charges
---------------
1,7,86
2,11,86
等