创建具有来自两个表的数据的数组

时间:2019-04-18 14:56:15

标签: mysql sql

我想创建一个表,在该表中使用“ 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查询的结果:

Image 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

Image 2

因此,我们需要显示两行,还需要对missed_treatment =''的count(*)都影响两行。

下面您可以从treatment_log中找到整个列表。

treatment_log

1 个答案:

答案 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