我想创建一个表,在该表中使用“ treatment_parameters”中的所有数据,并在其中parameter_fk = 47。此外,该表还应仅包含“ treatment_log”中未命中=“”的行的count(*)。
因此,该表应从parameter_fk = 47的“ treatment_parameters”中投影所有数据,并在其中“ missed_treatment =”的“ treatment_log”中行数。
还应注意:t.id = l.treatment_fk
我已经尝试过,但是部分成功。该表显示所有必需的数据,但是不会显示来自“ treatment_paratmers”中参数_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, 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查询的结果:
但是,您可以看到修改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
因此,我们需要显示两行,还需要对missed_treatment =''的count(*)都影响两行。
下面您可以从treatment_log中找到整个列表。
答案 0 :(得分:0)
所以您需要自我加入:
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