[英]MySQL query error when joining 3 tables
我有以下3表:
我需要設置一個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>
所以我創建了這個SQL查詢:
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'
而且我收到以下錯誤:
錯誤代碼:1140。在沒有GROUP BY的聚合查詢中,SELECT列表的表達式#1包含非聚合列'ncd.t1.med_id'; 這與sql_mode = only_full_group_by不兼容
您使用的GROUP BY
錯誤。 規則是SELECT
子句中的每一列也都在GROUP BY
子句中,或者必須對其應用聚合函數(例如count,min,max,avg)。
sql_mode ONLY_FULL_GROUP_BY可以防止這種情況。 當您禁用它時會發生什么,可以在以下問題中看到: 為什么我使用case語句在第二個計數器中獲得Null值
也可以在鏈接的問題中找到解決方案。 在此處重復說明:應用聚合函數或將列包括在group by子句中。
您可以這樣修復它:
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時,還有一個新函數any_value()可以用來代替聚合函數。 但是,顧名思義,它返回該組的任何值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.