C# 左外部联接代码的列名称不明确

C# 左外部联接代码的列名称不明确,c#,sql,forms,datagridview,inner-join,C#,Sql,Forms,Datagridview,Inner Join,我在表单上有一个datagridview来显示处方表数据。我想将处方表中的paymentID字段更改为付款表中存在的金额字段。但是在我的select语句中编写了左外连接代码之后,当我调试时,在第二个图像中出现了错误 付款和处方表 不明确的列名 查询应如下所示: string strCommandText = "SELECT prescriptionID, medicationID, a.appointmentID, c.amount FRO

我在表单上有一个datagridview来显示处方表数据。我想将处方表中的paymentID字段更改为付款表中存在的金额字段。但是在我的select语句中编写了左外连接代码之后,当我调试时,在第二个图像中出现了错误

付款和处方表

不明确的列名


查询应如下所示:

string strCommandText = "SELECT prescriptionID, medicationID, a.appointmentID,
                         c.amount  FROM PRESCRIPTION AS a
                         left outer join payment as c
                         on a.paymentid = c.paymentId";

由于两个表中都存在
AppointId
,因此您需要通过将
AppointId
替换为
a来解决歧义。AppointId
查询应如下所示:

string strCommandText = "SELECT prescriptionID, medicationID, a.appointmentID,
                         c.amount  FROM PRESCRIPTION AS a
                         left outer join payment as c
                         on a.paymentid = c.paymentId";

由于两个表中都存在
appointmentID
,因此需要通过将
appointmentID
替换为
a.appointmentID

来解决歧义,在联接操作中始终尝试使用表名别名:

Select ... From Table1 t1
LEFT JOIN table2 t2
on t1.Key = t2.FKey

在两个表中都可以找到该名称,请始终尝试在联接操作中为表名称使用别名:

Select ... From Table1 t1
LEFT JOIN table2 t2
on t1.Key = t2.FKey

由于不止一个表包含
appointmentID
列,因此需要指定要在select语句中获取的列

select ... a.appointmentID


如果两个表都包含相同的
appointmentID
值,则选择哪一个并不重要。由于您离开了外部联接,这意味着支付条目不必存在,当
c.AppointId
为空时,您可能会发现
a.AppointId
包含一些值,因为不止一个表包含
AppointId
列,您需要在select语句中指定要获取的列

select ... a.appointmentID


如果两个表都包含相同的
appointmentID
值,则选择哪一个并不重要。由于您离开了外部联接,这意味着支付条目不必存在,当
c.AppointId
为空时,您可能会发现
a.AppointId
包含一些值
c.AppointId
您有两个表a作为处方和c作为付款,因为两者都包含
AppointId
列,您需要指定要从中获取
AppointId
的表的别名。如果两个表都包含相同的
appointmentID
值,那么这并不重要,但因为您需要离开外部联接而不是内部联接,所以c不必存在,您需要决定使用哪个值感谢我的理解,这意味着,如果我将a.appointmentID设置为Yes,您需要指定要选择的表,您有两个表a为处方,c为付款,因为两者都包含
AppointId
列,您需要指定要从中获取
appointmentID
的表的别名。如果两个表都包含相同的
appointmentID
值,那么这并不重要,但因为您需要离开外部联接而不是内部联接,所以c可能不存在,您需要决定采用哪个值。我知道,这意味着如果我将a.AppointId设置为“是”,您需要指定要选择的表