MySQL子查询在3个表上返回超过1行

时间:2014-09-10 01:05:57

标签: mysql

SELECT b.bill_no, b.case_no, b.patient_id,
(Select (lastname) from myhospital.patient p where p.patient_id = b.patient_id) as l_name,
(Select (givenname) from myhospital.patient p where p.patient_id = b.patient_id) as f_name,
(Select (middle) from myhospital.patient p where p.patient_id = b.patient_id) as m_name,
(select (address_street) from myhospital.patient p where
p.patient_id = b.patient_id) as adress, m. item_name,
(select cast(m.unit_price as Char(8))) as unit_price,
(select cast(m.qty as Char(8))) as quantity,
(select cast(m.charges as Char(8))) as charges,
m.date_rec, m.service_code,
(select (descript) from myhospital.hosp_services s where m.service_code = s.service_code) as Section,
(Select (fullname) from myhospital.users u where u.user_id = m.edit_by) as Encode_by,
(Select (descript) from myhospital.hosp_bill_etc c where b.bill_no = c.bill_no) as misc_edit
FROM myhospital.hosp_bill b join myhospital.hosp_bill_meds m
where b.bill_no = m.bill_no

我从1个数据库加入2个表,我想添加另一个表“myhospital.hosp_bill_etc”,我收到错误

子查询返回多行,

请有人告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

正如你所说的,你显然是新的查询,它确实需要练习。首先了解表之间的关系,并直接连接(或左连接)而不进行重复查询。因此,患者信息应该是给定“patient_id”的单个记录。表之间的连接需要确定它们如何相关,或者您将获得笛卡尔结果。请注意我是如何通过“ON”命令显示各个表之间的关系的。为了便于阅读,请注意我是如何在视觉上嵌套表关系,例如从计费到账单到医疗服务,以及用户等。

现在,您可以通过简单的别名从字段选择列表中的相应表中获取任何列...无论如何,希望对您有所帮助...另外,我不知道您为什么铸造费用,数量,价格作为特征。通常输出到那里格式化的内容并保留原始值。

SELECT 
      b.bill_no, 
      b.case_no, 
      b.patient_id,
      p.lastname as l_name,
      p.givenname as f_name,
      p.middle as m_name,
      p.address_street as address, 
      m. item_name,
      m.unit_price,
      m.qty as quantity,
      m.charges,
      m.date_rec, 
      m.service_code,
      s.descript as Section,
      u.fullname as Encode_by,
      c.descript as misc_edit
   FROM 
      myhospital.hosp_bill b 
         JOIN myhospital.patient p
            ON b.patient_id = p.patient_id

         JOIN myhospital.hosp_bill_meds m
            ON b.bill_no = m.bill_no
            JOIN myhospital.hosp_services s 
               ON m.service_code = s.service_code
            JOIN myhospital.users u 
               ON m.edit_by = u.user_id

         JOIN myhospital.hosp_bill_etc c 
            ON b.bill_no = c.bill_no

所以这是表的关系,但它现在将返回所有患者的所有条目。如果您想要特定账单或患者的某些内容,您可以为该特定组件添加WHERE子句。

现在,似乎总是向一名患者提出法案。 法案有很多药物。 我认为每个med都有一个服务,但如果一个med可以有多个,你会得到重复。 此外,对于每个药物,我希望与记录/分发药物的人有关联。

最后你的“bill_etc”。如果这有多行,那么也可能导致笛卡尔结果。

希望基于您的数据环境与许多泛型相比是一个良好的开端,您可能需要了解一下,但请更多地阅读SQL实践。