我需要一些有關此查詢的幫助。我有 2 個資料表
預訂表
| 預訂編號 | 預定日期 | 預訂開始 | 職員表 | 學生卡 | 地位 |
|---|---|---|---|---|---|
| 1 | 2021-10-10 | 7.30pm | 1 | 12345678 | 結束 |
| 2 | 2021-10-10 | 11.30am | 1 | 12345679 | 結束 |
| 3 | 2021-10-10 | 中午 12 點 | 1 | 空值 | 取消 |
學生表|studentid|名字|姓氏| |--|--|--| |12345678|約翰|多伊| |12345679|瑪麗|母鹿| |12345670|文森特|doe|
我在找什么表
| 預定日期 | 預訂開始 | 學生姓名 |
|---|---|---|
| 2021-10-10 | 7.30pm | 約翰·多伊 |
| 2021-10-10 | 11.30pm | 瑪麗喬 |
| 2021-10-10 | 中午 12 點 | 空值 |
使用這個查詢,
Select Booking_date,
Booking_start,
case WHEN booking.StudentID is NULL THEN NULL ELSE student.First_name end as First_name,
case WHEN booking.StudentID is NULL THEN NULL ELSE student.Last_name end as Last_name,
BookingID
from booking, student
where (booking.staffid = '$userid') ORDER BY booking_start ASC)
這是我得到的桌子
| 預定日期 | 預訂開始 | 學生姓名 |
|---|---|---|
| 2021-10-10 | 7.30pm | 約翰·多伊 |
| 2021-10-10 | 7.30pm | 母鹿 |
| 2021-10-10 | 7.30pm | 文森特 |
| 2021-10-10 | 11.30pm | 瑪麗喬 |
| 2021-10-10 | 11.30pm | 約翰·喬 |
| 2021-10-10 | 11.30pm | 文森特·喬 |
| 2021-10-10 | 中午 12 點 | |
| 2021-10-10 | 中午 12 點 |
應該還有 1 個 2021-10-10|12.00pm|| 由于格式問題,我無法顯示它。它顯示了帶有錯誤學生姓名的重復串列。我該怎么做才能解決此查詢?
uj5u.com熱心網友回復:
您需要像這樣連接表:
booking inner join student on booking.StudentID = student.StudentID
Select Booking_date,
Booking_start,
student.First_name,
student.Last_name,
BookingID
from booking inner join student on booking.StudentID = student.StudentID
where (booking.staffid = '$userid')
ORDER BY booking_start ASC
如果你不連接表,它們就像笛卡爾連接,所有行都與所有其他行匹配,所以它會生成重復的。例如,如果你有 2 個表,每個表有 10 行,結果你會得到 10*10 結果......
內部聯接 = 只有在記錄匹配時才能獲得。
如果您在預訂表上有記錄并且沒有與學生表匹配的studing_id,并且仍然希望將其顯示為結果,則需要使用LEFT JOIN而不是INNER JOIN
最好使用連接語法而不是舊連接,例如:
舊語法:
student,booking
where
student.id = booking.studentid
新語法:
student inner join booking on student.id = booking.studentid
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/357417.html
上一篇:背景色做奇怪的事情
下一篇:PHP陣列總和和分組重復
