MySQL问题:使用子查询的内部联接不返回任何结果

时间:2014-01-29 19:12:15

标签: mysql sql

我有一个包含不同表单版本版本的表单的数据库。下面的“工作”查询成功地按照每个表单版本的批准使用日期选择最新的表单版本。

我想将这个查询“working”查询与另一个名为“forms_types”的表联系起来,该表返回“form_type”列的全文描述。

我尝试这样做是行不通的 - 我应该在查询的“加入”版本上得到50个结果,但它没有返回任何结果。

在让我的工作查询正确加入时,我们将不胜感激任何帮助或见解!

工作(50个结果但没有加入):

SELECT *
FROM forms AS t
WHERE california =
    ( 
    SELECT MAX(california)
    FROM forms
    WHERE `form_number` = t.`form_number`
    AND trucking_coverage= 1
    AND california IS NOT NULL
    AND california <= '2014-01-29'
    AND form_type <> 0
    )
ORDER BY `t`.`form_type` ASC, `t`.`form_number` ASC

不工作(无结果):

SELECT *
FROM forms AS t
INNER JOIN forms_types 
ON 'forms.form_type' = 'forms_types.form_type'
WHERE california =
    ( 
    SELECT MAX(california)
    FROM forms
    WHERE `form_number` = t.`form_number`
    AND trucking_coverage= 1
    AND california IS NOT NULL
    AND california <= '2014-01-29'
    AND form_type <> 0
    )
ORDER BY `t`.`form_type` ASC, `t`.`form_number` ASC

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

SELECT f.*, t.*
  FROM 
( 
  SELECT form_number, MAX(california) california
    FROM forms
   WHERE trucking_coverage = 1
     AND california IS NOT NULL
     AND california <= '2014-01-29'
     AND form_type <> 0
   GROUP BY form_number
) q JOIN forms f
    ON q.form_number = f.form_number
   AND q.california = f.california JOIN forms_types t
    ON f.form_type = t.form_type
 ORDER BY f.form_type, f.form_number

它也可以通过这种方式重写(通过利用非标准的MySQL GROUP BY扩展名)

SELECT *
  FROM
(
  SELECT *
    FROM forms f JOIN forms_types t
      ON f.form_type = t.form_type
   WHERE f.trucking_coverage = 1
     AND f.california IS NOT NULL
     AND f.california <= '2014-01-29'
     AND f.form_type <> 0
   ORDER BY california DESC
) q
 GROUP BY f.form_number
 ORDER BY f.form_type, f.form_number