我想创建一个表,其中使用"treatment_parameters"中的所有数据,其中 parameter_fk=47。此外,该表还应仅包含 missed_treatment=' ' 的"treatment_log"中的行数 (*)。
因此,该表应投影出"treatment_parameters"中的所有数据,其中 parameter_fk=47 和"treatment_log"中的行数,其中 missed_treatment=' '。
还应注意:t.id = l.treatment_fk
我已经尝试过,但是它部分成功了。该表显示所有必需的数据,但它不会显示 parameter_fk=47 的"treatment_paratmers"中的每一行。(应该有两行不同的行)
SELECT t.id,t.parameter_fk,t.course_name,t.room, t.protocol,t.navigation,t.area,t.coil,t.number_of_treatments,t.motor_threshold,t.threshold_multiplier,t.target_threshold,t.about,t.date,t.created_at, COUNT(*) AS completed_treatments
FROM treatment_parameters t
LEFT JOIN treatment_log l
ON t.id = l.treatment_fk
WHERE t.parameter_fk = 47
AND l.missed_treatment=' '
下面可以看到上述 SQL 查询的结果:
图片 1
但是,您可以看到,当修改 SQL 查询时,paratmer_fk=47 的行不止一行
SELECT t.id,t.parameter_fk,t.course_name,t.room, t.protocol,t.navigation,t.area,t.coil,t.number_of_treatments,t.motor_threshold,t.threshold_multiplier,t.target_threshold,t.about,t.date,t.created_at
FROM treatment_parameters t
WHERE t.parameter_fk = 47
图片 2
所以我们需要显示两行,并且还要让 missed_treatment=' ' 的 count(*) 影响两行。
您可以在下面找到treatment_log的完整列表。
treatment_log
所以你需要自我加入:
SELECT t.id,t.parameter_fk,t.course_name,t.room, t.protocol,t.navigation,t.area,
t.coil,t.number_of_treatments,t.motor_threshold,t.threshold_multiplier,t.target_threshold,
t.about,t.date,t.created_at, aa.t_count AS completed_treatments
FROM treatment_parameters t
left join (select treatment_fk, count(*) as t_count from treatment_log l
where l.missed_treatment=' ' group by treatment_fk) aa on aa.treatment_fk=t.id
WHERE t.parameter_fk = 47