如何使用复合键进行内连接

时间:2016-03-30 05:01:12

标签: mysql join composite-primary-key

  

我有card_type表,其中有card_id   auto_increment密钥和cardtpeprimary key。另一张桌子   我有activities表。活动表中的columns   是activity_id auto_increment密钥和activity列   primary key。第三个表是actual_alldetails表。该   actual_alldetails中的列为id,其中auto_increment为{}   带有(emp_code,activity_id,card_id)的{​​{1}}列。该   第四个表是composite key表,这些表中的列是   employee emp_codeprimary key

。{/ 1}

当我尝试执行我的一个查询时: -

emp_name

它显示我的错误:

  

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

我不明白为什么它会向我显示这些错误。是因为我正在使用一个主键和一个复合键进行内连接? 如果我的预测是正确的,那么做这些的正确查询是什么? 请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

错误消息说明了:

  

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

你有一个select语句,其中包含聚合值SUM(TIME_TO_SEC(a.out_time)和非聚合值TIME_TO_SEC(a.in_time)

我不知道您希望的结果到底是什么,但是您必须将聚合函数应用于第二个值,或者您已经添加了一个组,因为错误消息说明它知道该怎么做小组。

例如,将查询更改为:

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;

我猜测员工的身份价值:i.emp_code

答案 1 :(得分:0)

仔细观察这一行:

  

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

此处有一个SUM()函数,看起来非常奇数,很可能会触发您的错误消息。尝试删除SUM