多个表上的mysql和外键关系

时间:2012-08-03 12:10:26

标签: mysql sql database

我一直无法找到检索数据的方法 - 我需要一种在mysql查询中遍历多个外键关系的方法。一般表结构如下:

Subjects (table)
-id
-fname
-lname
-etc.

Events(table):
-id
-subject_id
-procedure_id
-date

Procedures(table):
-id
-description

这些标识符用于其他表,例如:

Assessment1(table):
-id
-event_id
-data, etc.

Assessment2(table):
-id
-event_id
-data, etc.

我遇到的问题是能够为评估1和评估2都有事件的受试者提取所有评估数据。我已经能够成功地为一次评估或两次评估提取数据共享相同的event_id,在本例中为Assessment1和Assessment 1a。但我需要一种方法能够基于subject_id进行链接,而subject_id不在评估表中,因为它通过事件表。

我成功使用的查询(基于event_id)是:

select 
    s.first_name, 
    s.last_name, 
    s.ssn, 
    e.subject_id, 
    n.*,
    l.Q23 
from 
    subjects s, 
    events e, 
    Assessment1 n, 
    Assessment1a l 
where 
    e.subject_id = s.id 
    and l.event_id = e.id 
    and l.Q23 = "1" 
    and n.event_id = e.id

如何修改此数据以为具有不同event_ids但具有相同subject_id的评估提取数据?

1 个答案:

答案 0 :(得分:1)

  

如何修改此数据以为具有不同event_ids但具有相同subject_id的评估提取数据?

我认为这就是你所需要的。

SELECT *
FROM subjects s
JOIN events e1 ON e1.subject_id = s.id
JOIN events e2 ON e2.subject_id = s.id and e1.id != e2.id
JOIN assessment1 a1 ON a1.event_id = e1.id
JOIN assessment2 a2 ON a2.event_id = e2.id