连接3个表时出现MySQL查询错误

连接3个表时出现MySQL查询错误,mysql,sql,join,Mysql,Sql,Join,我有以下三个表格: 我需要设置一个HTML表,其中显示以下内容: <tr class="bg-info"> <th>Med ID</th> <th>Med Name</th> <th>Med Expiry</th> <th>Barcode</th> <th>Num

我有以下三个表格:

我需要设置一个HTML表,其中显示以下内容:

        <tr class="bg-info">
          <th>Med ID</th>
          <th>Med Name</th>
          <th>Med Expiry</th>
          <th>Barcode</th>
          <th>Number of Tablets received</th>
          <th>Total Number of Pills received</th>
          <th>Date Received</th>
          <th>Pills distributed</th>
          <th>Still (in tablets)</th>
          <th>Still (in pills)</th>
        </tr>
我收到了以下错误:

错误代码:1140。在没有分组依据的聚合查询中,表达式1 选择列表的包含未聚合列“ncd.t1.med_id”;这是 与sql\u模式不兼容=仅\u完整\u组\u由

你用错了分组。规则是SELECT子句中的每一列要么也在GROUPBY子句中,要么必须对其应用count、min、max、avg等聚合函数

sql_模式ONLY_FULL_GROUP_BY阻止了这种情况。禁用时会发生什么,请参见以下问题:

答案也可以在链接的问题中找到。在这里重复:应用聚合函数或在GROUPBY子句中包含列

您可以这样来修复它:

select t1.med_id,
t3.med_name,
t1.med_expiry, 
t1.med_barcode, 
t1.med_tablet, 
t1.med_pill, 
t1.med_received,
sum(t2.given_quantity)
FROM med_pharmacy t1, consultation_med t2, medication t3 WHERE t1.med_pharmacy_id = t2.med_pharmacy_id AND t1.med_id=t3.med_id
AND t1.clinic_id='361'
group by 
t1.med_id,
t3.med_name,
t1.med_expiry, 
t1.med_barcode, 
t1.med_tablet, 
t1.med_pill, 
t1.med_received
还是像这样

select 
MAX(t1.med_id),
MAX(t3.med_name),
MAX(t1.med_expiry), 
MAX(t1.med_barcode), 
MAX(t1.med_tablet), 
MAX(t1.med_pill), 
MAX(t1.med_received),
sum(t2.given_quantity)
FROM med_pharmacy t1, consultation_med t2, medication t3 WHERE t1.med_pharmacy_id = t2.med_pharmacy_id AND t1.med_id=t3.med_id
AND t1.clinic_id='361'
或者两者结合,取决于您的需要

当您使用MySQL 5.7时,还有一个新函数,您可以使用它来代替聚合函数。但正如名称所示,它返回组的任何值。

您使用的组是错误的。规则是SELECT子句中的每一列要么也在GROUPBY子句中,要么必须对其应用count、min、max、avg等聚合函数

sql_模式ONLY_FULL_GROUP_BY阻止了这种情况。禁用时会发生什么,请参见以下问题:

答案也可以在链接的问题中找到。在这里重复:应用聚合函数或在GROUPBY子句中包含列

您可以这样来修复它:

select t1.med_id,
t3.med_name,
t1.med_expiry, 
t1.med_barcode, 
t1.med_tablet, 
t1.med_pill, 
t1.med_received,
sum(t2.given_quantity)
FROM med_pharmacy t1, consultation_med t2, medication t3 WHERE t1.med_pharmacy_id = t2.med_pharmacy_id AND t1.med_id=t3.med_id
AND t1.clinic_id='361'
group by 
t1.med_id,
t3.med_name,
t1.med_expiry, 
t1.med_barcode, 
t1.med_tablet, 
t1.med_pill, 
t1.med_received
还是像这样

select 
MAX(t1.med_id),
MAX(t3.med_name),
MAX(t1.med_expiry), 
MAX(t1.med_barcode), 
MAX(t1.med_tablet), 
MAX(t1.med_pill), 
MAX(t1.med_received),
sum(t2.given_quantity)
FROM med_pharmacy t1, consultation_med t2, medication t3 WHERE t1.med_pharmacy_id = t2.med_pharmacy_id AND t1.med_id=t3.med_id
AND t1.clinic_id='361'
或者两者结合,取决于您的需要


当您使用MySQL 5.7时,还有一个新函数,您可以使用它来代替聚合函数。但正如名称所示,它返回组的任何值。

然后您会得到错误的结果。“干得好,@Ulugtoprak阅读了更多关于如何修复它的信息?不清楚您的预期结果是什么。然后您会得到错误的结果。”。干得好,@Ulugtoprak阅读了更多关于如何修复它的信息?不清楚您的预期结果是什么。那么我如何修复它?编辑了我的答案。这是新的吗?我两年前从来没有收到过这个。这是什么意思?这是5.7版中的新版本。这一变化意味着什么?你当时没有设置sql_模式。您可以删除它,但如果不调整查询,您可能会从查询中得到错误的结果。那么我如何修复它?编辑了我的答案。这是新的吗?我两年前从来没有收到过这个。这是什么意思?这是5.7版中的新版本。这一变化意味着什么?你当时没有设置sql_模式。您可以删除它,但如果不调整查询,您可能会从查询中得到错误的结果。