我有两张表member
和alumni
。 alumni
表可以在多行中具有相同的member
且具有不同的year
字段。我想从表中选择所有数据。
给出的表格是:
校友:
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
给出的表成员是:
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
表格中的另一条记录。我试图用regd
使用以下php和mysql语句来显示它,但它不能按预期工作。
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;
错误是,它仅从alumni
表中选择所有数据。哪里可能出错?虽然我没有在这里提供小提琴,但我希望这能说明我的观点。请帮帮我。
答案 0 :(得分:0)
MySQL不支持OUTER JOIN
。
https://stackoverflow.com/a/4796911/4421474
所以你应该这样做:
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