在mysql中格式化左连接选择(不显示左表中的所有记录)

时间:2014-09-26 07:28:27

标签: mysql select left-join

我有以下sql

SELECT *
FROM  (SELECT sample_register.usin,
          Date_format(sample_register.doc, '%d-%m-%Y') AS doc1,
          sample_register.location,
          sample_register.description,
          gamma_results.act,
          gamma_results.act_sd,
          gamma_results.mdl,
          gamma_results.bdl
   FROM   sample_register
          LEFT JOIN gamma_results
                 ON gamma_results.usin = sample_register.usin
   WHERE  Mid(sample_register.usin, 3, 1) = 'F'
          AND sample_register.doc BETWEEN'2014-09-01' AND '2014-09-26'
          AND sample_register.type <> 'WATER'
          AND gamma_results.istp = 'Cs137'
   ORDER  BY Mid(sample_register.usin, 3, 1),
             sample_register.doc,
             sample_register.usin) AS a
  LEFT JOIN (SELECT sample_register.usin,
                    gamma_results.act,
                    gamma_results.act_sd,
                    gamma_results.mdl,
                    gamma_results.bdl
             FROM   sample_register
                    LEFT JOIN gamma_results
                           ON gamma_results.usin = sample_register.usin
             WHERE  Mid(sample_register.usin, 3, 1) = 'F'
                    AND sample_register.doc BETWEEN
                        '2014-09-01' AND '2014-09-26'
                    AND ( sample_register.type <> 'WATER' )
                    AND gamma_results.istp = 'k40'
             ORDER  BY Mid(sample_register.usin, 3, 1),
                       sample_register.doc,
                       sample_register.usin) AS b
         ON a.usin = b.usi 

它只给我2行。有30条记录符合sample_register中的where子句,4条记录对应于gamma_results中的2 USIN。我希望sample_register中的所有30条记录都与gamma_results一起加入,其中数据仅适用于2个USIN。在sample_register中剩余28条记录,返回的字段值可以为null。我发现如果我删除了条件gamma_results_istp,则会显示所有30条记录。但我不想要这个。请提出任何建议。

1 个答案:

答案 0 :(得分:0)

不确定但可能您必须将条件gamma_results_istp从Where运算符传输到ON运算符;否则它是在执行左连接之后应用的,而不是之前:

... On (gamma_results.usin = sample_register.usin and gamma_results.istp='Cs137')

对第二个gamma_results.istp条件重复相同的操作。

此外,简化您的示例只是为了向我们展示相关的内容不会伤害任何人。