MYSQL 连接具有相同数据的两个表
MYSQL Join Two tables with same data
我有两个 tables member
和 alumni
。 alumni
table 可以在具有不同 year
字段的多行中具有相同的 member
。我想 select 来自 table 的所有数据。
给出的 table 是:
校友:
id, regd, name, status, year
1 1 kim inactive 2013
2 1 kim inactive 2014
3 1 kim inactive 2015 //This is generated for alumni purpose
给出的 table 成员是:
regd, name, status, year
1 kim Active 2015
预期输出为:
`regd`, `name,` `status,` `year`
1 kim Active 2015
1 kim inactive 2014
1 kim inactive 2013
如果alumni
中没有例如2015年的记录,它仍然会显示alumni
中的另一条记录和member
table中的2015年。我正在尝试使用以下 php 和 mysql 语句通过 regd
显示它,但它没有按预期工作。
Mysql:
SELECT m.*, a.* FROM member m
LEFT JOIN alumni a ON m.regd = a.regd
WHERE m.regd ='1' GROUP BY a.year ORDER BY a.year DESC;
PHP:
foreach($members as member):
echo $member['regd'].' '.$member['year'].'<br>';
endforeach;
错误是,它 select 仅来自 alumni
table 的所有数据。我哪里会出错?虽然我没有在这里提供 fiddle,但我希望这能阐明我的观点。请帮助我。
OUTER JOIN
MySQL 不支持。
所以你应该这样做:
SELECT res.* FROM (
SELECT
m.regd,
m.name,
COALESCE(m.status, a.status),
m.year,
FROM member m
LEFT JOIN alumni a
ON m.regd = a.regd
AND m.year = a.year
WHERE m.regd ='1'
UNION
SELECT
a.regd,
a.name,
a.status,
a.year,
FROM member m
RIGHT JOIN alumni a
ON m.regd = a.regd
AND m.year = a.year
WHERE a.regd ='1'
AND m.regd IS NULL
) res
ORDER BY res.year DESC
我有两个 tables member
和 alumni
。 alumni
table 可以在具有不同 year
字段的多行中具有相同的 member
。我想 select 来自 table 的所有数据。
给出的 table 是:
校友:
id, regd, name, status, year
1 1 kim inactive 2013
2 1 kim inactive 2014
3 1 kim inactive 2015 //This is generated for alumni purpose
给出的 table 成员是:
regd, name, status, year
1 kim Active 2015
预期输出为:
`regd`, `name,` `status,` `year`
1 kim Active 2015
1 kim inactive 2014
1 kim inactive 2013
如果alumni
中没有例如2015年的记录,它仍然会显示alumni
中的另一条记录和member
table中的2015年。我正在尝试使用以下 php 和 mysql 语句通过 regd
显示它,但它没有按预期工作。
Mysql:
SELECT m.*, a.* FROM member m
LEFT JOIN alumni a ON m.regd = a.regd
WHERE m.regd ='1' GROUP BY a.year ORDER BY a.year DESC;
PHP:
foreach($members as member):
echo $member['regd'].' '.$member['year'].'<br>';
endforeach;
错误是,它 select 仅来自 alumni
table 的所有数据。我哪里会出错?虽然我没有在这里提供 fiddle,但我希望这能阐明我的观点。请帮助我。
OUTER JOIN
MySQL 不支持。
所以你应该这样做:
SELECT res.* FROM (
SELECT
m.regd,
m.name,
COALESCE(m.status, a.status),
m.year,
FROM member m
LEFT JOIN alumni a
ON m.regd = a.regd
AND m.year = a.year
WHERE m.regd ='1'
UNION
SELECT
a.regd,
a.name,
a.status,
a.year,
FROM member m
RIGHT JOIN alumni a
ON m.regd = a.regd
AND m.year = a.year
WHERE a.regd ='1'
AND m.regd IS NULL
) res
ORDER BY res.year DESC