在JOIN上排除MySQL中的结果

时间:2013-12-06 16:20:49

标签: mysql sql join birt

以下是我的MySQL声明:

select
    tableT.id,
    tableTGroupName,
    tableTGroupSortOrder,
    tableT_group.Deleted as tableTGroupDeleted,
    tableTSuiteName,
    tableTSuiteSortOrder,
    tableT_suite.Deleted as tableTSuiteDeleted,
    tableTCaseName, 
    tableTCaseSortOrder,
    tableT_case.Deleted as tableTCaseDeleted,
    DbPackageName,
    E_imgLR as Eimg, 
    R_imgLR as Rimg,
    tableTResultState,
    tableTResultComment
from 
    tableT_result
    inner join tableT on tableT_id = tableT.id
    inner join tableT_run on tableT_run_id = tableT_run.id
    inner join db_package on db_package_id = db_package.id
    inner join tableT_case on tableT_case_id = tableT_case.id
    inner join tableT_suite on tableT_suite_id = tableT_suite.id
    inner join tableT_group on tableT_group_id = tableT_group.id
    left outer join E_img_lo_r on tableT_case.e_img_id = E_img_lo_r.e_img_id or tableT_suite.e_img_id = E_img_lo_r.e_img_id -- Problematic line
    left outer join result_image_low_res on tableT_result.result_image_id = result_image_low_res.result_image_id
where
    db_package_label_id = ?
order by 
    tableTGroupSortOrder, 
    tableTSuiteSortOrder, 
    tableTCaseSortOrder

最后这句话给了我16行,3行(结果)是多余的。 3 x 2行具有相同的ID,如:(234,234)(71,71)(445,445)。行

left outer join E_img_lo_r on tableT_case.e_img_id = E_img_lo_r.e_img_id or tableT_suite.e_img_id = E_img_lo_r.e_img_id

导致这种情况,我可以使用DISTINCT消除重复的ID,但行的内容不一样。这就是为什么我不想消除必要的行。

我的目的是首先检查“tableT_case”是否有图像,如果是,则使用它,如果不使用“tableT_suite”中的那个,如果“tableT_suite”也没有图像,则采用默认的“No image” ”。在连接语句中不能使用Afaik if-else。当两个表都包含一个图像时,它需要两个我不想要的。我需要这个用于Birt报告,我们不希望在报告上显示错误的图像。我会很高兴任何提示。

1 个答案:

答案 0 :(得分:0)

你能添加一个and吗?将有问题的行更改为:

left outer join E_img_lo_r
on
tableT_case.e_img_id = E_img_lo_r.e_img_id
or 
(
    tableT_case.e_img_id != E_img_lo_r.e_img_id
    and
    tableT_suite.e_img_id = E_img_lo_r.e_img_id
)