很难解释但我有这个表,在有3列的情况下会产生费用(no,patient_no,procedure_no)忽略“no”列。我需要的另一个表是收费,其中存储了程序的名称。所以我想输出procedure_no及其相应的过程名称。
问题是,“收费”不是我需要的唯一表格。因为我是如此愚蠢,我分离了ER充电,超声波和限制的程序名称。因此生成具有相同结构的三个表。
SELECT incurredcharges.procedure_no, incurredcharges.patient_no, charges.procedure
FROM incurredcharges
INNER JOIN charges
ON incurredcharges.procedure_no=charges.procedure_no
WHERE incurredcharges.patient_no=12;
该声明有效但只显示过程名称来自ER费用。超声和限制程序名称将不会显示!
答案 0 :(得分:2)
对于迫切需要,您可以将3个表格UNION ALL
作为JOIN
的派生表进行对抗。
SELECT
`c`.`procedure`,
`incurredcharges`.`procedure_no`,
`incurredcharges`.`patient_no`
FROM
incurredcharges
/* UNION ALL the 3 like tables together as a derived table */
INNER JOIN (
SELECT `procedure`, `procedure_no` FROM `charges`
UNION ALL
SELECT `procedure`, `procedure_no` FROM `confinement`
UNION ALL
SELECT `procedure`, `procedure_no` FROM `ultrasound`
) c ON `incurredcharges`.`procedure_no` = c.`procedure_no`
WHERE `incurredcharges`.`patient_no` = 12
然而,正确的长期修复是使用子查询中使用的类似UNION ALL
结构将所有这些记录插回到统一表中,并使用新列标识其源。
CREATE TABLE unified_charges AS
SELECT `procedure`, `procedure_no`, 'ER' AS `chargetype` FROM `charges`
UNION ALL
SELECT `procedure`, `procedure_no`, 'CONFINEMENT' AS `chargetype` FROM `confinement`
UNION ALL
SELECT `procedure`, `procedure_no`, 'ULTRASOUND' AS `chargetype` FROM `ultrasound`
注意:procedure
必须使用反引号引用a MySQL reserved keyword,所以我只引用了所有内容。