id - name - address
-----------------------------
1 - Jim - Some Street
2 - Adam - Some Street
3 - ABC - Some Street
id - job - finished_by
---------------------------
1 - ABC - 2
2 - EFD - 3
3 - XYZ - 2
4 - BVC - 1
在上面的两个表中,Table1.id和Table2.finished_by应该被链接。
例如,在表2中,工作ABC由亚当完成。
我的目标是从表2中选择DISTINCT
条记录。
结果应该输出每个人完成的所有工作。
到目前为止我有这个问题:
SELECT *
FROM table2
LEFT JOIN table1 ON table2.finished_by = table1.id
LIMIT 0 , 30
这会并排加入Tables,但是如何编辑查询以使其仅显示不同的记录,以便输出为:
id - job - id - name
----------------------------
1 - ABC - 2 - Adam
2 - EFD - 3 - ABC
4 - BVC - 1 - Jim
更新
所以,我做了一些谷歌搜索并对我的查询进行了一些更改:
SELECT DISTINCT finished_by FROM table2 LEFT JOIN table1 ON table2.finished_by = table1.id 限制0,30
但是,似乎只执行查询的第一行,因为我没有看到LEFT JOIN表。
可能这个查询需要多一点整理??
更多更新:
所以,从StacKOverflow的一些非常杰出的成员那里我已经注意到我的逻辑是完全错误的。所以,我将尝试用简单的单词而不是程序/代码来解释我想要实现的目标。可能就是这样,我可以快速找到解决方案。
所以,我的公司是:CompanyA 吉姆,亚当等人都为公司A工作..但是,公司A派吉姆,亚当等为另一家公司工作..说公司1
吉姆,亚当等可以被派去为多家这样的公司工作。说吉姆被派去为Company1工作两次,亚当被派去为公司1工作三次。
表2按以下格式记录了一个人为Company1工作的时间:
id - job - finished_by - Date
------------------------------------
1 - ABC - 2 - 10 Oct
2 - EFD - 3 - 11 Oct
3 - XYZ - 2 - 12 Oct
4 - BVC - 1 - 13 Oct
现在,我的目标很简单,需要按照以下方式为Company1生成报告:
例如,理想输出/报告将是:
ABC - EFD - 10月11日
Adam - ABC,XYZ - 10月10日,10月12日
Jim - BVC - 10月13日
我可以做所有的基本报告,但我不知道如何将在finished_by coloumn中坐在Table2中的数字转换为table1中各自的名称
我希望我现在明白我的问题。
谢谢,每个人!!
我非常感谢您的时间和精力
答案 0 :(得分:2)
根据您的最新更新,您似乎想要一个逗号分隔的“作业”名称和日期列表。 MySQL的GROUP_CONCAT
函数实现了这一点。所以也许是这样的:
SELECT table1.*, GROUP_CONCAT(table2.job), GROUP_CONCAT(table2.date)
FROM table1
INNER JOIN table2 ON (t1.id = t2.finished_by)
GROUP BY t1.id
这将为您提供所有工作人员的清单,以及他们工作地点和时间的逗号分隔清单。
请注意,每个GROUP_CONCAT
列表中的值都没有顺序。因此,您无法确定,例如,列出的第一个作业是否与列出的第一个日期相对应。但是如果你想保持这种连接不变,那么无论如何你都希望每个工作分开。
答案 1 :(得分:1)
SELECT DISTINCT *
FROM table2
LEFT JOIN table1 ON table2.finished_by = table1.id
LIMIT 0 , 30
这有用吗?
答案 2 :(得分:0)
听起来好像你想要所有的Table1细节,以及他们从Table2完成的所有工作的计数。如果是这样,试试这个:
select t1.id,
max(t1.name) name,
max(t1.address) address,
count(t2.id) finished_jobs
from Table1 t1 left outer join Table2 t2 on t1.id = t2.finished_by
group by t1.id;