使用JOIN包含NULL值

时间:2018-01-14 18:21:03

标签: php mysql

我的目标是结合两个表(预测和user_score)的结果,以便让所有用户在比赛中得分并且没有得分,但是他们正在参与游泳池(poolid = 110)

预测

predid    | matchid  | ueserid    | points |
--------------------------------------------
1            121            8        1
2            122            8        2
3            122            10       3

user_score

id    | poolid  | userid    | 
------------------------------
1         110            8
2         110            10
3         111            8
4         111            10

结果应该是这样的:

| matchid  | ueserid    | points |  poolid 
--------------------------------------------
  121            8          1      110
  null           10         null   110

这是我尝试的几个查询:

SELECT * FROM predictions LEFT JOIN user_score on predictions.userid = user_score.userid WHERE predictions.matchid=121 and user_score.poolid=110

SELECT * FROM predictions RIGHT JOIN user_score on predictions.userid = user_score.userid WHERE predictions.matchid=121 and user_score.poolid=110

此查询不适用于我的SQL版本Apache / 2.4.26(Win32)OpenSSL / 1.0.2l PHP / 5.6.31 /数据库客户端版本:libmysql - mysqlnd 5.0.11-dev - 20120503 /

SELECT * FROM predictions FULL OUTER JOIN user_score on predictions.userid = user_score.userid WHERE predictions.matchid=121 and user_score.poolid=110

我需要帮助:)

1 个答案:

答案 0 :(得分:2)

使用LEFT JOIN,并将条件matchid = 121放入ON子句:

select p.matchid, s.userid, p.points, s.poolid 
from user_score s
left join predictions p
  on  p.userid  = s.userid
  and p.matchid = 121
where s.poolid = 110

演示:http://sqlfiddle.com/#!9/2a1a5/1

您也可以使用RIGHT JOIN方法,但matchid = 121条件必须在ON子句中。

http://sqlfiddle.com/#!9/2a1a5/6