sql多属性连接

Posted

技术标签:

【中文标题】sql多属性连接【英文标题】:sql multiple attribute join 【发布时间】:2016-04-21 19:14:18 【问题描述】:

我正在创建一个关于医疗实践的测试数据库。这是我的er图的图片供参考。 ER diagram

所以基本上我的问题是如何正确地进行连接。我正在尝试提供从给定实践中看到的患者列表(例如实践 id 1),但我也想显示实践名称和详细信息。我还想列出工作或去过该诊所的患者和全科医生的名单(请记住,我的表格中只填充了 10 行测试数据)

到现在为止

select patient.firstname, patient.surname
from patient
Join appointment on patient.patientid = appointment.patientid
where appointment.practiceid IN (1)
ORDER BY firstname;

`我如何还包括与此实践相关的实践详细信息和 gp 详细信息。令我困惑的是,如果它们不是来自患者表,我如何添加更多选择语句。任何帮助都会很棒!

【问题讨论】:

好答案。如果您真的想要一个给定的实践(而不是一组实践),那么更改您的 where 子句是有意义的。使用“其中约会.practiceid = 1”。它更快,只是很好的做法。 OTOH,如果您真的想要一套练习,只需按照答案中的建议进行连接即可。 【参考方案1】:

您可以添加更多 join 子句:

SELECT   patient.firstname, patient.surname, practice.name, practice.address
FROM     patient
JOIN     appointment ON patient.patientid = appointment.patientid
JOIN     practice ON appointment.practiceid = practice.practiceid
WHERE    appointment.practiceid IN (1)
ORDER BY firstname;

【讨论】:

感谢这真的有帮助!【参考方案2】:

我喜欢给我的 SQL 语句起别名。节省打字。

SELECT p.firstname, p.surname, pr.Details
FROM patient p
JOIN appointment a ON p.patientid = a.patientid
JOIN Practice pr ON pr.PracticeId = a.PracticeId 
WHERE a.practiceid IN (1)
ORDER BY p.firstname;

【讨论】:

非常感谢!这真的很有帮助!【参考方案3】:

我已经包含了如何在您的查询中显示Practice_Name,如果您对您提到的每个其他查询使用相同的连接逻辑方法,您将解决它。我认为这是一种更好的学习方式,而不是在一个答案中解决上述所有问题。

SELECT    PR.Practice_Name, P.firstname, P.surname
FROM      patient AS P
            INNER JOIN appointment AS A ON P.patientid = A.patientid
            INNER JOIN Practice AS PR ON A.practiceid = PR.practiceid
WHERE     A.practiceid IN (1)
ORDER BY  P.firstname;

【讨论】:

以上是关于sql多属性连接的主要内容,如果未能解决你的问题,请参考以下文章

反对 js:无法使用连接表额外属性更新多对多关系。说附加属性无效

sql查询多值属性

java实现多表的自定义查询。

Python 多处理错误“ForkAwareLocal”对象没有属性“连接”

如何为连接表中的其他属性创建多对多 Hibernate 映射?

如何设置连接属性(包括同义词)