在select语句中显示表名而不是ID

时间:2016-07-02 14:24:57

标签: sql sql-server vb.net visual-studio

我有一个表格(gridview)出现,一旦'患者'登录,他们就可以看到他们已下订单(订单表/ Order_pres)。

订单表包含所有来自其他表的外键列表,例如Patient表中的Patient Id和药房表中的PharmacyId:

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 来自Patient表,我想得到'Forename' 和连接到患者ID的表格中的“姓氏”。

MedicineId 来自药物表​​,我想得到'姓名'

药房 - 来自药房表,我想得到'pharmname'

医生 - 来自Doctor表,我想得到'姓名'

订购日期 - 来自Order_pres并保持不变

希望有人可以提供帮助。亲切的问候

1 个答案:

答案 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)