2016-07-02 36 views
0

我有一個表格(gridview)出現,一旦「病人」登錄,他們就可以看到他們已經下達的訂單(訂單表/ Order_pres)。在select語句中顯示錶名而不是ID

順序表包含外鍵的列表中的所有其他表從藥房桌子患者平臺PharmacyId即患者ID:

orders

在患者/醫生/藥房表,這些都有名字 - 我希望我的聲明顯示名稱而不是表中的ID,因爲名稱比查看代碼更有意義。訂單ID將保持不變(作爲Id),因爲它只是Order_pres表的一部分。

If Not IsPostBack Then 
      Dim conn As New System.Data.SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\surgerydb.mdf;Integrated Security=True;Connect Timeout=30") 


      Dim cmd2string As String = "SELECT * FROM [Order_pres]" 
      Dim dt As New System.Data.DataTable() 
      Dim da As New System.Data.SqlClient.SqlDataAdapter(cmd2string, conn) 
      da.SelectCommand.Parameters.Add("@PatientId", System.Data.SqlDbType.Int).Value = CInt(Session("PatientId").ToString()) 
      conn.Open() 
      da.Fill(dt) 
      conn.Close() 

      GridVieworders.DataSource = dt 
      GridVieworders.DataBind() 
     End If 

的OrderId - 將保持不變,來自order_pres表

PatientId來自患者的表,我想從連接表「用的名字」 和「姓」患者ID。

MedicineId來自藥桌上,我想「名稱」

藥房 - 從藥房桌子來了,我想「pharmname」

醫生 - 來從博士表,我想要'名稱'

訂購日期 - 來自Order_pres,將保持不變

希望有人可以提供幫助。親切的問候

回答

1

也許這樣的事情

你會注意到兩件事。
1)使用LEFT JOIN的情況下,不填充一個或多個鑰匙ID

2)加入到SOMEFIELD,沒有指定的補充表

Select A.OrderID 
     ,A.PatientId 
     ,B.Forename 
     ,B.Surname 
     ,A.MedicineId 
     ,C.Name  as MedicineName 
     ,A.Pharmacy 
     ,D.pharmname 
     ,A.DoctorID 
     ,E.Name as DoctorName 
     ,A.DateOrderd 
From order_pres A 
Left Join Patient B on (A.PatientId = B.SomeField) 
Left Join medicine C on (A.MedicineId = C.SomeField) 
Left Join pharmacy D on (A.Pharmacy = D.SomeField) 
Left Join Doctor E on (A.DoctorID = E.SomeField) 
+0

約翰嗨主鍵!感謝您花時間回答這個問題 - 在這個答案中,我將使用(例如)OrderId作爲A,而不是在聲明中實際包括A Ie - 左加入患者PatientId(Forename.PatientId = Patient.Forename) - 對不起,我只是高傲的混淆 – laurajs

+0

主鍵是訂單ID – laurajs

+0

您的選擇。我只是更喜歡使用別名,它對我來說往往更易讀,而且更簡潔。 –

相關問題