php - SQL 结果应显示所有表一数据

标签 php mysql sql

我有两个表,如下所示:

table 一

teamid     teamname   description
   1           x         abcd
   2           y         dcba
   3           z         sadf

表_二

stageid   teamid   responses    score
   1        1        r1          20
   1        2        r2          30
   2        1        r4          20
   2        2        r5          20
   2        3        r6          20

我正在尝试根据我拥有的 stageid 编号加入上述两个表。所以,我尝试了以下方法:

SELECT t1.teamid, t1.teamname, t2.responses, t2.score 
FROM table_one as t1
JOIN table_two as t2 ON t1.teamid = t2.teamid
WHERE stageid = 1

这给了我以下结果(我尝试了左、右、内、外连接的所有组合):

teamid    teamname   responses   score
  1          x           r1        20
  2          y           r2        30

预期结果表

teamid    teamname   responses   score
  1          x           r1        20
  2          y           r2        30
  3          z          NULL       0

正如您在上面预期的表格中看到的,我想要 table_onetable_two 的所有行,如果数据不存在,我需要 NULL0 作为值。

如何做到这一点?

最佳答案

试试这个:

SELECT t1.teamid, t1.teamname, t2.responses, t2.score 
FROM table_one as t1
LEFT JOIN table_two as t2 ON t1.teamid = t2.teamid
WHERE stageid = 1 OR stageid IS NULL

默认情况下,当您使用左连接时,没有任何要连接的字段将包含 NULL,因此您必须添加 NULL,而不仅仅是一个特定的 stageid。

或者正如其他人提到的那样,您可以像这样设置 stageid:

SELECT t1.teamid, t1.teamname, t2.responses, t2.score 
FROM table_one as t1
LEFT JOIN table_two as t2 ON t1.teamid = t2.teamid AND stageid = 1
WHERE 1

在此查询中,您使用连接的 ON 标记来设置 stageid,您会得到相同的结果。 (WHERE 1 不是必需的)

检查连接:https://stackoverflow.com/a/6188334/2231168

关于php - SQL 结果应显示所有表一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031823/

相关文章:

javascript - Jquery - 将值附加到段落

php - 分形 laravel 变压器中的条件属性

php - 如果 MySQL 行输出等于 X 则执行 Y

mysql - 代码点火器 : retrieve lastest row in table?

MySQL函数: Rotate old entries to archive table

php - mysql_real_escape_string() 但允许带撇号的名称

php - 为什么我无法将时间戳值添加到 mysql 数据库中的时间戳字段?

mysql - 如何将 CSV 列表连接到表列

sql - 从table1,table2,table3哪里删除?

mysql - 随机和重复的顺序?