我的数据库中有这些表:
游客 - 这是第一张表
Tourist_ID - primary key
Excursion_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 - 主键
..... 的 Tourist_Reservations
Tourist_Reservation_ID
Reservation_ID - foreign key
Tourist_ID - foreign key
所以这是我的例子:我已经预订了Reservaton_ID - 27这个预订有两个游客,其中Tourist_ID - 86和Tourist_ID - 87这个游客ID为86,额外收费为Extra_Charge_ID - 7和Extra_charge_ID - 11;身份证87的游客额外收费,身份证号码为10;
是否可以进行sql查询以及游客的姓名和身份以及所有额外费用
输出看起来像:
Tourist_ID:86,姓名:JOHN,额外费用:7,11
(以下是我为了获得所有预订_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_IDhe e
where RESERVATIONS.Reservation_ID=27
这里的问题是我有三条记录
所以,如果你认为.net中有一种方法可以获得第一个名称,然后是这个名字的所有额外费用 - 请提供建议,因为我是.net
的新手答案 0 :(得分:1)
如果我正确理解了您的架构,那么这应该是您正在寻找的;
SELECT t.Tourist_ID, t.Name,
STUFF((
SELECT CAST(',' AS VARCHAR(MAX)) + CAST(tec.Extra_Charge_ID AS VARCHAR(MAX))
FROM Tourist_Extra_Charges tec
WHERE tec.Tourist_ID = t.Tourist_ID
ORDER BY tec.Extra_Charge_ID
FOR XML PATH('')
), 1, 1, '') AS Charges
FROM Tourist t;