JOIN在mysql中显示两次数据?

时间:2017-12-03 14:32:08

标签: php mysql join

SELECT *
FROM `all_salary_slip_details` `assd`
INNER JOIN `employee_master` `em` ON `assd`.`EMPLOYEE_ID` = `em`.`EMPLOYEE_ID`
INNER JOIN `employee_details` `ed` ON `assd`.`EMPLOYEE_ID` = `ed`.`EMPLOYEE_ID`
INNER JOIN `organizations` `o` ON `o`.`ORG_ID` = `assd`.`ORG_ID`
INNER JOIN `months` `mo` ON `mo`.`id` = `assd`.`PAY_MONTH`

这是我从db获取数据的查询。我只有4行,但在我看来,我得到48行。我不明白为什么会这样。

2 个答案:

答案 0 :(得分:0)

您需要在列上使用GROUP BY子句,然后您的查询将仅为该列中的每个唯一条目返回一行。

在您的情况下,我猜测使用员工名称是有意义的。

此查询输出的结果是什么?

SELECT assd.PAY_YEAR, assd.PDF, em.EMPLOYEE_NAME, o.ORG_NAME, mo.month_name
FROM all_salary_slip_details assd
INNER JOIN employee_master em
ON assd.EMPLOYEE_ID = em.EMPLOYEE_ID
INNER JOIN organizations o
ON o.ORG_ID = assd.ORG_ID
INNER JOIN months mo
ON mo.id = assd.PAY_MONTH
GROUP BY em.EMPLOYEE_NAME

答案 1 :(得分:0)

对于与连接条件匹配的连接表中的每条记录,您的查询中将返回1行。

因此,如果employee_master,employee_details,organization或months table中的任何一个表中有多条记录与all_salary_slip_details中的记录匹配,则会返回其他行。查看返回的行,您将看到每个行的差异以及它们的不同之处将告诉您表的连接条件在何处不足以返回单行。