2016-03-30 81 views
0

加入我card_type表,其中有card_idauto_increment鍵,cardtpeprimary key。我有的另一張表 是activities表。活動表 中的columnsactivity_id,其中auto_increment鍵和activity列爲 primary key。第三張表是actual_alldetails表。 actual_alldetails中的 列是idauto_increment密鑰和 (emp_code,activity_id,card_id)列與composite key。 第四張表是employee表和這些表中的列是 emp_codeprimary keyemp_name怎麼辦內複合鍵

當我嘗試執行我的查詢之一: -

SELECT i.*, 
     d.Date, 
     a.in_time, 
     a.out_time, 
     SEC_TO_TIME(SUM(TIME_TO_SEC(a.out_time))-(TIME_TO_SEC(a.in_time))) AS duration, 
     c.cardtype, 
     a.wo, 
     v.activity, 
     a.quty, 
     a.wastage, 
     a.mcusage, 
     a.actual_wastage 
FROM employee_details i 
INNER JOIN actual_alldetails a ON i.emp_code=a.emp_code 
INNER JOIN attendance_date d ON d.date_id=a.date_id 
INNER JOIN card_type c ON c.card_id=a.card_id 
INNER JOIN activities v ON v.activity_id=a.activity_id 
WHERE d.Date='2016-01-30' 
ORDER BY v.activity; 

它告訴我像錯誤:組列

混合(MIN(),MAX() COUNT(),...)沒有GROUP 列是非法的,如果沒有GROUP BY子句。

我不明白爲什麼它顯示出像這樣的錯誤。是否因爲我正在使用一個主鍵和一個組合鍵進行內部連接? 如果我的預測是正確的,那麼做這些的正確查詢是什麼? 請幫我解決這個問題。

回答

0

看這句話更接近:

SEC_TO_TIME(SUM(TIME_TO_SEC(a.out_time))-(TIME_TO_SEC(a.in_time))) AS duration,

這裏有一個SUM()功能,看起來非常和最有可能觸發您的錯誤消息。嘗試刪除SUM

1

錯誤消息說它:

沒有GROUP列組列(MIN(),MAX(),COUNT(),...)的混合是非法的,如果沒有GROUP BY子句。

你有一個包含聚合值SUM(TIME_TO_SEC(a.out_time)和非聚合值TIME_TO_SEC(a.in_time)

我不知道究竟是什麼結果你希望的,但您可能已應用的聚合函數select語句到第二個值,或者您需要添加一個組作爲錯誤消息說,以便知道分組。

例如更改查詢到這一點:

SELECT i.*, 
    d.Date, 
    a.in_time, 
    a.out_time, 
    SEC_TO_TIME(SUM(TIME_TO_SEC(a.out_time))-(TIME_TO_SEC(a.in_time))) AS duration, 
    c.cardtype, 
    a.wo, 
    v.activity, 
    a.quty, 
    a.wastage, 
    a.mcusage, 
    a.actual_wastage 
FROM employee_details i 
INNER JOIN actual_alldetails a ON i.emp_code=a.emp_code 
INNER JOIN attendance_date d ON d.date_id=a.date_id 
INNER JOIN card_type c ON c.card_id=a.card_id 
INNER JOIN activities v ON v.activity_id=a.activity_id 
WHERE d.Date='2016-01-30' 
GROUP BY i.emp_code 
ORDER BY v.activity; 

我猜在id值你的員工:i.emp_code