2013-05-01 51 views
0

我有一个如下所述的mysql查询,它完全返回我想要的一行结果,但不返回任何其他行,我期望在我的测试数据中有8个有8个独特的测试ID)。我受到this answer的启发,但显然搞砸了我的实现,有没有人看到我要去哪里错了?从MySQL数据透视查询结果丢失的行

SELECT 
c.first_name, 
c.last_name, 
n.test_name, 
e.doc_name, 
e.email, 
e.lab_id, 
a.test_id, 
a.date_req, 
a.date_approved, 
a.accepts_terms, 
a.res_value, 
a.reason, 
a.test_type, 
a.date_collected, 
a.date_received, 
k.kind_name, 
sum(case when metabolite_name = "Creatinine" then t.res_val end) as Creatinine, 
sum(case when metabolite_name = "Glucose" then t.res_val end) as Glucose, 
sum(case when metabolite_name = "pH" then t.res_val end) as pH 
    FROM test_requisitions  AS a 
    INNER JOIN personal_info AS c ON (a.user_id = c.user_id) 
    INNER JOIN test_types  AS d ON (a.test_type = d.test_type) 
    INNER JOIN kinds   AS k ON (k.id = d.kind_id) 
    INNER JOIN test_names  AS n ON (d.name_id = n.id) 
    INNER JOIN docs    AS e ON (a.doc_id = e.id) 
    INNER JOIN test_metabolites AS t ON (t.test_id = a.test_id) 
    RIGHT JOIN metabolites  AS m ON (m.id = t.metabolite_id) 
    GROUP BY a.test_id 
    ORDER BY (a.date_approved IS NOT NULL),(a.res_value IS NOT NULL), a.date_req, c.last_name ASC; 
+0

您正在使用'RIGHT JOIN代谢物',这意味着您的结果集不会包含任何在代谢物表中没有记录的行 – a1ex07 2013-05-01 18:32:07

回答

1

大部分加入的是inner join s。最后一个是right outer join。正如所写,查询保留所有metabolites,但不一定是所有的测试。

,我建议您将它们全部更改为left outer join S,因为要保留所有的行中第一个表:

FROM test_requisitions  AS a 
    LEFT JOIN personal_info AS c ON (a.user_id = c.user_id) 
    LEFT JOIN test_types  AS d ON (a.test_type = d.test_type) 
    LEFT JOIN kinds   AS k ON (k.id = d.kind_id) 
    LEFT JOIN test_names  AS n ON (d.name_id = n.id) 
    LEFT JOIN docs    AS e ON (a.doc_id = e.id) 
    LEFT JOIN test_metabolites AS t ON (t.test_id = a.test_id) 
    LEFT JOIN metabolites  AS m ON (m.id = t.metabolite_id) 

我也建议你的别名进行相关的表,所以trtest_requisition,pipersonal_info,等等。

+0

您指出我在正确的路径上,我实际上想要的东西是所有的行test_requisitions(除代谢物表格外,与其相连的所有物质)将被复制,然后如果可能,将添加test_metabolites的值,否则将会添加nulls,否则为0CandenNarzt – 2013-05-01 19:01:01

+0

@CamdenNarzt。 。 。很高兴我能够提供帮助。 – 2013-05-01 19:07:53

+0

我会接受你的答案,但我会添加笔记,我需要做一个无条件的交叉连接的测试行代谢物,然后左加入到test_metabolites – 2013-05-01 19:12:06