如何在每个表上联接具有两个相同ID的多个表

时间:2019-07-03 06:36:22

标签: mysql vb.net

所以我的MySQL数据库命名有五个表

  1. 客人(guest_id)
  2. 预订(reservation_id,reservation_no)
  3. reservation_status(rStatus_id,rStatus_no)
  4. 计费(billing_id,billing_no)
  5. 付款(payment_id,payment_no)* _id是主键

我无法加入所有这些表。就像客人进行两次预订时一样,当然,第二次预订具有各自的账单,状态,付款和Reservation_status。在我的vb.net程序中,当同一位客人进行第二次预订时,系统将保存过去的预订并接受新的(现在)预订,而新的预订保存时会发生的事情是,它获得了客人的ID,并且将其保存在其他表的_no字段中。

示例

  • 来宾姓名:John Doe
  • 客人ID:1

在其他表上的过去的预订

  • reservation_id:1
  • reservation_no:1

当前预订和其他表格上的

  • reservation_id:2
  • reservation_no:1

该保留以john doe的名字保存,他已经接受了两项保留。

我的问题是当我使用内部联接选择这些数据时。我得到重复的值,甚至使用了不重复和分组依据;

示例代码在下面

这是我的桌子

客人

FieldTypeComment
guest_id int(50) NOT NULL
fullName varchar(200) NOT NULL
addressv archar(200) NOT NULL
contactNo varchar(200) NOT NULL
companyName varchar(200) NOT NULL
companyAddress varchar(200) NOT NULL
vehicleModel varchar(200) NOT NULL
plateNumber varchar(200) NOT NULL

预订

reservation_id int(50) NOT NULL
reservation_no int(50) NOT NULL
checkIn datetime NOT NULL
checkOut datetime NOT NULL
pax int(50) NOT NULL
nights int(50) NOT NULL
room_id int(50) NOT NULL
roomNumber int(50) NOT NULL
roomName varchar(200) NOT NULL
roomRate decimal(13,2) NOT NULL
rateApplied varchar(200) NOT NULL
rateType varchar(200) NOT NULL
rState varchar(200) NOT NULL

reservation_status

rStatus_id int(50) NOT NULL
rStatus_no int(50) NOT NULL
paymentType varchar(200) NOT NULL
reservationStatus varchar(200) NOT NULL
processedBy varchar(200) NOT NULL
rState varchar(200) NOT NULL

计费

billing_id int(50) NOT NULL
billing_no int(50) NOT NULL
computationBasis varchar(200) NOT NULL
perHourExtensionRate decimal(13,2) NOT NULL
totalRoomFee decimal(13,2) NOT NULL
otherChargesTotal decimal(13,2) NOT NULL
roomDiscountType varchar(200) NOT NULL
vatExemptRoomSale decimal(13,2) NOT NULL
vatRate int(50) NOT NULL
vrToDecimal decimal(13,2) NOT NULL
roomDiscountRate int(50) NOT NULL
rdToDecimal decimal(13,2) NOT NULL
roomDiscountPrice decimal(13,2) NOT NULL
discountedAmountTotal decimal(13,2) NOT NULL
subTotal decimal(13,2) NOT NULL
rState varchar(200) NOT NULL

付款

payment_idint(50) NOT NULL
payment_noint(50) NOT NULL
totalAmountDue decimal(13,2) NOT NULL
deposit decimal(13,2) NOT NULL
balance decimal(13,2) NOT NULL
amountPaid decimal(13,2) NOT NULL
runningBalance decimal(13,2) NOT NULL
paymentMethod varchar(200) NOT NULL
cashTendered decimal(13,2) NOT NULL
pChange decimal(13,2) NOT NULL
rState varchar(200) NOT NULL

输出

+----------+--------------+---------+-------------------+-----------------+----------+---------------+--------+
| Guest.ID | FullnameRoom | Fee     | otherChargesTotal | Running Balance | P.Method | Cash Tendered | Change |
+----------+--------------+---------+-------------------+-----------------+----------+---------------+--------+
| 1        | JOHN DOE     | 2050.00 | 0.00              | 2050.00         | UNPAID   | 0.00          | 0.00   |
+----------+--------------+---------+-------------------+-----------------+----------+---------------+--------+
| 1        | JOHN DOE     | 2050.00 | 0.00              | 3300.00         | UNPAID   | 0.00          | 0.00   |
+----------+--------------+---------+-------------------+-----------------+----------+---------------+--------+
| 1        | JOHN DOE     | 3300.00 | 0.00              | 2050.00         | UNPAID   | 0.00          | 0.00   |
+----------+--------------+---------+-------------------+-----------------+----------+---------------+--------+
| 1        | JOHN DOE     | 3300.00 | 0.00              | 3300.00         | UNPAID   | 0.00          | 0.00   |
+----------+--------------+---------+-------------------+-----------------+----------+---------------+--------+

但是我需要第一行和最后一行,因为它们是我需要获取的完整数据。

提前谢谢

0 个答案:

没有答案