php - MYSQL 连接两个具有相同字段值的表字段,但如果另一个字段与另一个字段不匹配,则仍将包含

标签 php mysql sql-order-by

今天看了很多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/

相关文章:

php - 在 PHP 中调用 JS 文件

php - mysqli_prepare 和 mysqli_query 哪个更快?

mysql - 从日期间隔中选择数据子范围

Mysql按用户定义高级排序

mysql - 多个 mysql order by 语句

sql - 在 Oracle 中执行查询时的 ORDER BY 性能

javascript - 如何更改 HTML.Twig 文件中隐藏文件的值

php - 是否有可能在 RedBeanPHP 中故意对表结构严格?

php - 如何在 for 循环中跟踪基数?

ASP.NET MySQL更新多条记录