首先让我说我对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从一个表的两个表中获取数据。
任何帮助都会受到高度赞赏,因为我真的被卡住了。
答案 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 ) )