从多个数据库表中获取信息的最佳方法

时间:2009-02-15 22:10:37

标签: c# wpf sql-server-2008 merge

我有一个医疗数据库,可以为患者提供不同类型的数据:检查,实验室结果,X光检查......每种类型的记录都存在于一个单独的表格中。我需要在一张桌子上显示这些数据,以显示患者在特定诊所的病史。

我的问题:最好的方法是什么?我应该从患者ID匹配的每个表中进行SELECT,按日期排序,然后将它们保存在一些类似人工列表的结构中(按日期排序)?或者有更好的方法吗?

我正在为这个应用程序使用WPF和SQL Server 2008。

5 个答案:

答案 0 :(得分:4)

正如其他人所说,JOIN就是你通常这样做的方式。但是,如果患者的一个表中有多行,那么您可能会在多行中重复获取数据,这通常是您不想要的。在这种情况下,有时使用UNION或UNION ALL会更容易。

假设您有两个表examinationsxrays,每个表都有一个PatientID,一个日期和一些额外的详细信息。你可以像这样组合它们:

SELECT PatientID, ExamDate [Date], ExamResults [Details]
FROM examinations
WHERE PatientID = @patient

UNION ALL

SELECT PatientID, XrayDate [Date], XrayComments [Details]
FROM xrays
WHERE PatientID = @patient

现在,您有一个包含PatientID,Date和Details列的大结果集。我发现这对于“合并”多个具有相似但不相同的数据的表格非常方便。

答案 1 :(得分:1)

使用JOIN从多个表中获取数据。

答案 2 :(得分:1)

如果您经常这样做,我会想要在所有患者数据(加入适当的表格)和index the appropriate column(s) in the view上创建非规范化视图。然后使用适当的方法(存储过程等)来检索传入的patientID的数据。

答案 3 :(得分:0)

您可以使用联接(无法准确记住哪种类型)来获取特定患者的每个表中的所有记录。这种方式取决于您的数据库设计。

答案 4 :(得分:0)

我使用单独的SELECT语句来完成它,因为一些简单的JOIN可能不会这样做,因为某些表可能对患者有超过1行。

所以我会在一个简单的DataSet中检索多个结果集,添加一个DalaRelation,缓存该对象并在该行中查询它(按日期,按考试类型,子集,...)

重点是,您可以在一个易于查询和过滤的结构中方便地获取所有数据,甚至可以在需要时进行缓存。