空链接仍显示行时的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。