我的第一张桌子是会员桌:
member_id, name, address, email
1 jon 122 any jon@test.ca
2 amy 111 gee amy@test.ca
我的第二张表是完成的测试级别:
MemberHistoryTable
member_id, level, date
1 a 2007
1 b 2008
1 c 2009
1 d 2010
2 a 2007
2 b 2008
2 c 2009
2 d 2010
2 d 2011
我想在历史记录表中检索成员信息和最近的日期:
jon, 122 any, jon@test.ca, 2010
amy, 111 gee, amy@test.ca, 2011
我尝试了很多不同的方法来加入这两个表,例如:
SELECT
memberTable.name,
memberTable.address,
memberTable.email,
memberHistoryTable.date
FROM memberTable
LEFT JOIN memberHistoryTable
ON memberHistoryTable.member_id=memberTable.member_id
但是这会再现多行相同的信息,每个日期都有一行......
jon, 122 any, jon@test.ca, 2007
jon, 122 any, jon@test.ca, 2008
jon, 122 any, jon@test.ca, 2009
jon, 122 any, jon@test.ca, 2010
amy, 111 gee, amy@test.ca, 2007
amy, 111 gee, amy@test.ca, 2008
amy, 111 gee, amy@test.ca, 2009
amy, 111 gee, amy@test.ca, 2010
amy, 111 gee, amy@test.ca, 2011
如果我将联接更改为:
LEFT JOIN (SELECT MAX(memberHistoryTable.date) FROM memberHistoryTable) X
ON x.member_id = memberTable.member_id
我得到了我想要的行,但是日期是NULL ......
jon, 122 any, jon@test.ca, NULL
amy, 111 gee, amy@test.ca, NULL
我尝试了很多种类的连接,但似乎都没有。无效值或系统只是挂起。
我花了很多时间搜索,我找到了许多似乎对我不起作用的解决方案。奇怪的是,我需要从另一个表中提取该查询的日期,但那个似乎有效。
答案 0 :(得分:0)
SELECT m.name, m.address, m.email, MAX(mh.date) `date` FROM memberTable m
INNER JOIN memberHistoryTable mh ON mh.member_id = m.member_id
GROUP BY m.name;
我假设member_id
表格中amy
的{{1}}应为members
而不是2
,因为它似乎1
1}}是标识表中每个成员的唯一值。
以上查询会产生如下内容:
member_id
我还想指出+------+---------+-------------+--------------+
| name | address | email | date |
+------+---------+-------------+--------------+
| amy | 111 gee | amy@test.ca | 2011 |
| jon | 122 any | jon@test.ca | 2010 |
+------+---------+-------------+--------------+
是mysql中的关键字,即使它可以用作不带引号的标识符,我也会考虑将我的列命名为其他内容。
我还建议您按date
而不是member_id
进行分组,因为根据我的理解,名称并不是唯一的:
name