SQL查询澄清

SQL查询澄清,sql,Sql,我有两张桌子,医生和帐单。我希望查看治疗多个患者的医生的姓名、医生和费用 医生表列如下所示: doctorid,dname billid,patientid,doctorid,fees 计费表列如下所示: doctorid,dname billid,patientid,doctorid,fees 我尝试了以下代码。但在声明SQL cmd未正确结束时出错: SELECT d.dname,b.doctorid,Sum(b.fees)as "TotalFees" FROM billing b,

我有两张桌子,医生和帐单。我希望查看治疗多个患者的医生的姓名、医生和费用

医生表列如下所示:

doctorid,dname
billid,patientid,doctorid,fees
计费表列如下所示:

doctorid,dname
billid,patientid,doctorid,fees
我尝试了以下代码。但在声明SQL cmd未正确结束时出错:

SELECT d.dname,b.doctorid,Sum(b.fees)as "TotalFees" FROM billing b,doctor d ON b.doctorid=d.doctorid
GROUP BY b.doctorid HAVING count(b.patientid)>1; 
我的语法哪里出了问题? 谢谢…

账单b上的医生d.doctorid=d.doctorid应该是 从帐单b内部加入b上的医生d.doctorid=d.doctorid

从帐单b开始,b上的医生d.doctorid=d.doctorid应为 从b.doctorid=d.doctorid上的账单b内部连接医生d开始,您缺少内部连接关键字,并且您还需要按SELECT子句中使用的所有非聚合列分组,在本例中,按d.dname,b.doctorid分组

此外,它可能是一个输入错误,但在Sumb.fees和as之间没有空格:

记住,在FROM子句中使用逗号分隔的表名将执行笛卡尔乘积,这将是性能杀手,具体取决于RDBM的优化器。如果您想使用它,请记住将其连接条件放在WHERE子句中,ON子句与连接语法一起使用:

您缺少内部JOIN关键字,并且在本例中,您还需要按SELECT子句组中使用的所有非聚合列按d.dname、b.doctorid进行分组

此外,它可能是一个输入错误,但在Sumb.fees和as之间没有空格:

记住,在FROM子句中使用逗号分隔的表名将执行笛卡尔乘积,这将是性能杀手,具体取决于RDBM的优化器。如果您想使用它,请记住将其连接条件放在WHERE子句中,ON子句与连接语法一起使用:


您必须在查询中提到要使用哪个连接,您必须更改查询,如

SELECT d.dname, b.doctorid, Sum(b.fees) as "TotalFees" 
FROM billing b inner join doctor d ON b.doctorid=d.doctorid
GROUP BY d.dname, b.doctorid HAVING count(b.patientid)>1;

检查

您必须在查询中提到要使用哪种联接,您必须更改查询,如

SELECT d.dname, b.doctorid, Sum(b.fees) as "TotalFees" 
FROM billing b inner join doctor d ON b.doctorid=d.doctorid
GROUP BY d.dname, b.doctorid HAVING count(b.patientid)>1;
检查试试这个

SELECT d.dname,b.doctorid,Sum(b.fees)as "TotalFees" FROM billing b inner join doctor d ON b.doctorid=d.doctorid
GROUP BY d.dname,b.doctorid HAVING count(b.patientid)>1; 
试试这个

SELECT d.dname,b.doctorid,Sum(b.fees)as "TotalFees" FROM billing b inner join doctor d ON b.doctorid=d.doctorid
GROUP BY d.dname,b.doctorid HAVING count(b.patientid)>1; 

不要混合语法,尝试从帐单b内部加入医生d或左加入以显示没有帐单的医生。重复的。这一条更清楚:-不要混淆语法,尝试从帐单b内部连接医生d或左连接显示没有帐单的医生。重复的。这一点要清楚得多:-没有关键字join就不能执行连接吗?可以这样做,但严格来说它不是一个连接。这是一个笛卡尔产品,取决于DBMS的优化器是否可以在运行时转换为联接。在这种情况下,请记住在WHERE子句中指定连接条件b.doctorid=d.doctorid。您可以执行完全连接,然后添加WHERE子句,这类似于Xavican的第二个示例:如果没有关键字join,则不能执行连接?可以执行,但严格来说它不是一个连接。这是一个笛卡尔产品,取决于DBMS的优化器是否可以在运行时转换为联接。在这种情况下,请记住在WHERE子句中指定连接条件b.doctorid=d.doctorid。您可以执行完全连接,然后添加WHERE子句,这看起来像第二个XaviThank u示例,非常有用。Xavi非常有用:@狄克逊很高兴这有帮助:我知道你已经问了一些问题,但还没有接受任何答案。请记住,对于整个社区和未来的访问者来说,清楚地回答这个问题或其他问题是非常有价值的。请看一看。记住投票选出有帮助的答案,并接受解决你问题的答案。非常感谢你,哈维,非常有帮助@狄克逊很高兴这有帮助:我知道你已经问了一些问题,但还没有接受任何答案。请记住,对于整个社区和未来的访问者来说,清楚地回答这个问题或其他问题是非常有价值的。请看一看。记住投票选出有用的答案,并接受解决你问题的答案。