使用LEFT JOIN将数据从一个数据库迁移到另一个数据库

时间:2017-12-07 15:23:02

标签: mysql

首先让我说我对MySQL比较新。我正在尝试将数据从一个数据库迁移到另一个数据库。让我们调用一个数据库DB1和另一个DB2。

DB2 具有下表的表。

患者: id, person_id and start_regimen_id

方案: id, code

访问: id, patient_id, regimen_id,next_appointment_date

DB1 包含以下表格:

患者: id,medical_record_number,current_regimen, start_regimen nextappointment

现在:

应将

regimen_id 数据插入 current_regimen

应将

start_regimen_id 数据插入 start_regimen

应将

next_appointment_date 插入 nextappointment

这就是我现在所拥有的:

                 SELECT
                    p.person_id AS medical_record_number,
                    r.code AS start_regimen,
                    ??? AS current_regimen,
                    DATE_FORMAT(v.next_appointment_date, '%Y-%m-%d') AS 
                    nextappointment,
                FROM patient p
                LEFT JOIN regimen r ON r.id = p.start_regimen_id
                LEFT JOIN (
                    SELECT patient_id, MAX(next_appointment_date) as next_appointment_date 
                    FROM visit 
                    WHERE next_appointment_date IS NOT NULL 
                    GROUP BY patient_id
                ) v ON v.patient_id = p.id

我一直在将DB2上的regimen_id(访问)迁移到DB1上的current_regimen(患者)。我不知道如何使用两个LEFT JOIN从一个表的两个表中获取数据。

任何帮助都会受到高度赞赏,因为我真的被卡住了。

1 个答案:

答案 0 :(得分:1)

似乎我们希望在regimen_id表的GROUP BY中加入visit,然后将其与id表格中的regimen进行匹配。鉴于外部联接,patient可能没有任何regimen关联,因此我将包含NULL regimen_id值的匹配。

    LEFT
    JOIN ( SELECT vv.patient_id
                , vv.regimen_id
                , MAX(vv.next_appointment_date) AS next_appointment_date 
             FROM visit vv
            WHERE vv.next_appointment_date IS NOT NULL 
            GROUP
               BY vv.patient_id
                , vv.regimen_id
         ) v
      ON v.patient_id = p.id
     AND v.regimen_id <=> r.id

但这只是猜测。没有规范(最好通过示例数据和预期输出说明),我们只是在猜测。

注意:

foo <=> bar

是一个NULL安全比较,一个等同于

的简写
( foo = bar OR ( foo IS NULL AND bar IS NULL ) )