Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
空链接仍显示行时的SQL联接_Sql_Sql Server_Join - Fatal编程技术网

空链接仍显示行时的SQL联接

空链接仍显示行时的SQL联接,sql,sql-server,join,Sql,Sql Server,Join,我有两张桌子: 患者: | patientid | name | address | | 45 | jelle | adres 2 | | 23 | piet | adres 6 | | 11 | kees | adres 4 | | agendaid | patientid | datum | time | | 1 | 45 | 2020-05-12 | 12:05 | | 2 |

我有两张桌子:

患者:

| patientid | name  | address |
|    45     | jelle | adres 2 |
|    23     | piet  | adres 6 |
|    11     | kees  | adres 4 |
| agendaid | patientid | datum      | time    | 
|    1     |     45    | 2020-05-12 |  12:05  |
|    2     |     45    | 2020-07-11 |  16:02  |
|    3     |     11    | 2020-02-10 |  10:35  |
议程:

| patientid | name  | address |
|    45     | jelle | adres 2 |
|    23     | piet  | adres 6 |
|    11     | kees  | adres 4 |
| agendaid | patientid | datum      | time    | 
|    1     |     45    | 2020-05-12 |  12:05  |
|    2     |     45    | 2020-07-11 |  16:02  |
|    3     |     11    | 2020-02-10 |  10:35  |
我想从
议程

获取所有患者即将进行的预约 我尝试运行此查询:

SELECT * FROM patient LEFT JOIN agenda ON patient.patientid = agenda.patientid WHERE agenda.datum >= CURDATE()
但这一项只返回将来有预约的患者。
我想接待所有的病人,即使他们将来没有预约

期望的结果应该是:

| patientid | name  | address | agendaid | patientid |   datum    | time  |
|    45     | jelle | adres 2 |    2     |    45     | 2020-07-11 | 16:02 | 
|    23     | piet  | adres 6 |          |           |            |       |
|    11     | kees  | adres 4 |    3     |    11     | 2020-02-10 | 10:35 |
有人知道如何做到这一点吗?
我创建了一个
sqlfiddle
,供大家查看


正如您所看到的,当每个患者有多个预约时,它会为每个患者返回多行,而不会返回将来没有预约的患者。

您需要将筛选条件移动到
ON
子句。否则,将外部联接转换为内部联接:

SELECT p.*, a.*
FROM patient p LEFT JOIN
     agenda a
     ON p.patientid = a.patientid AND a.datum >= CURDATE();

您需要将筛选条件移动到
ON
子句。否则,将外部联接转换为内部联接:

SELECT p.*, a.*
FROM patient p LEFT JOIN
     agenda a
     ON p.patientid = a.patientid AND a.datum >= CURDATE();

现在没有预约的病人出现了,谢谢!但我希望每个病人只排一行。这也是可能的吗?@Jbadminton没有子查询作为连接条件,指定您希望每个数据库的最小数据patient@Jbadminton . . . 我建议您提出一个新问题,重点关注“为每位患者返回一行”。虽然这可能会隐藏在这个问题中,但问题似乎更多地是关于返回不匹配的行。现在出现了没有预约的患者,谢谢!但我希望每个病人只排一行。这也是可能的吗?@Jbadminton没有子查询作为连接条件,指定您希望每个数据库的最小数据patient@Jbadminton . . . 我建议您提出一个新问题,重点关注“为每位患者返回一行”。虽然这可能会隐藏在这个问题中,但问题似乎更多地是关于正确返回不匹配的rows.Tag。您没有使用sql server,因为它没有curdate()函数。您的小提琴正在正确使用MySQL.Tag。您没有使用sql server,因为它没有curdate()函数。你的小提琴正在使用MySQL。