0

我的数据库中有这些表:

游客- 这是第一张桌子

Tourist_ID - primary key
Excursion_ID - foreign key
Name...etc...

额外费用

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 的预订 这个预订有两个游客,游客 ID - 86 和游客 ID - 87 游客 ID 86 有额外费用, Extra_Charge_ID - 7 和 Extra_charge_ID - 11;ID 87 的游客需支付 ID - 10 的额外费用;

是否可以进行sql查询和游客的姓名和身份证,然后是所有额外费用

所以输出看起来像:

Tourist_ID:86,姓名:JOHN,额外费用:7,11

(这是我为获取所有 Reservation_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 的新手

4

1 回答 1

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;

一个用于测试的 SQLfiddle

于 2013-07-25T10:28:15.140 回答