今天看了很多MYSQL Combining tables,但是没有一个适合我的问题。谁能帮我实现我想要的结果,如下所示?
表 1:
|--------------------| | tbl1 | |--------------------| |user_id|points|year | |--------------------| | 1 | 3.2 | 2001| | 1 | 2.2 | 2002| | 1 | 3.8 | 2003| | 1 | 3.6 | 2005| | 2 | 1.2 | 2001| | 2 | 1.2 | 2002| | 2 | 1.2 | 2003| | *etc... | |--------------------|
表 2:
|--------------------| | tbl2 | |--------------------| |user_id|amount|year | |--------------------| | 1 | 6.2 | 2001| | 1 | 9.2 | 2002| | 1 | 2.8 | 2003| | 1 | 7.6 | 2004| | 2 | 3.2 | 2001| | 2 | 8.2 | 2002| | 2 | 6.2 | 2003| | *etc... | |--------------------|
我只想得到user_id1 我有以下查询,我尝试了很多查询组合但没有得到任何结果。
SELECT `tbl1`.`points`, `tbl2`.`amount`, `tbl1`.`year` FROM ( SELECT * FROM `tbl1` WHERE `user_id` = 1 ORDER BY `year` DESC ) AS `tbl1` INNER JOIN ( SELECT * FROM `tbl2` WHERE `user_id` = 1 ORDER BY `year` DESC ) AS `tbl2` ON `tbl2`.`year` = `tbl1`.`year`
我对该查询的问题是我使用:
ON `tbl2`.`year` = `tbl1`.`year`
这只会返回比赛年份。是的,我卡住了。
期望的结果:
|----------------------------| | JOINED/COMBINED | |----------------------------| |user_id|amount|points| year | |----------------------------| | 1 | 6.2 | 3.2 | 2001 | | 1 | 9.2 | 2.2 | 2002 | | 1 | 2.8 | 3.8 | 2003 | | 1 | 7.6 | Null | 2004 | | 1 | Null | 3.6 | 2005 | | *etc... | |----------------------------|
这种情况下的问题是 table2 有 2004 而 table1 有 2005 它们都没有另一个。但我仍然想按年份显示它们。
如果仅靠查询无法完成,我也将接受 PHP 脚本来完成此操作,但在这里我更关心的是查询..
最佳答案
您正在 MySQL
上寻找 FULL OUTER JOIN
= LEFT + RIGHT JOIN
:
SELECT *
FROM tbl1
LEFT JOIN tbl2 ON tbl1.user_id = tbl2.user_id
AND tbl1.year = tbl2.year
UNION
SELECT *
FROM tbl1
RIGHT JOIN tbl2 ON tbl1.user_id = tbl2.user_id
AND tbl1.year = tbl2.year
关于php - MYSQL 连接两个具有相同字段值的表字段,但如果另一个字段与另一个字段不匹配,则仍将包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45478040/