我有一个表格(gridview)出现,一旦'患者'登录,他们就可以看到他们已下订单(订单表/ Order_pres)。
订单表包含所有来自其他表的外键列表,例如Patient表中的Patient Id和药房表中的PharmacyId:
在患者/医生/药房表中,这些都有名字 - 我希望我的陈述显示名称而不是表格中的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 来自Patient表,我想得到'Forename' 和连接到患者ID的表格中的“姓氏”。
MedicineId 来自药物表,我想得到'姓名'
药房 - 来自药房表,我想得到'pharmname'
医生 - 来自Doctor表,我想得到'姓名'
订购日期 - 来自Order_pres并保持不变
希望有人可以提供帮助。亲切的问候答案 0 :(得分:1)
也许是这样的
你会注意到两件事 1)如果未填充一个或多个密钥ID,则使用LEFT JOIN
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)