如果在MySQL语句中使用ELSE或CASE?

时间:2013-11-15 15:53:51

标签: mysql sql if-statement

这是我的MySQL声明:

select
tableG.id,
TestName,
test_group.Merged as TestGroupMerged,
TestSuiteName,
test_suite.Merged as TestSuiteMerged,
test_case.Deleted as TestCaseDeleted,
Long_image_name as Image, 
from 
test_table

-- new added line -- inner join Long_image_name on test_B.long_image_id = image_table.long_image_id
    inner join Long_image_name on test_A.long_image_id = image_table.long_image_id


where
    db_test_id = ?

我们正在将图像添加到另一个表(test_B),如果test_B不包含它应该在test_A中看到的图像,如果test_A也没有它那么空白图像(没有)。

我想这样解决:

IF (test_B.long_image_id IS NULL) THEN 
inner join Long_image_name on test_A.long_image_id = image_table.long_image_id
ELSE
inner join Long_image_name on test_B.long_image_id = image_table.long_image_id

我无法测试实现,因为数据库当前没有任何图像文件。使用'CASE'会更好吗?

谢谢你的时间!

3 个答案:

答案 0 :(得分:0)

你不能像这样进行条件连接,但你可以在更高级别进行IF()测试:

SELECT COALESCE(test_B.long_image_id, test_A.long_image_id)
FROM ...
INNER JOIN ... test_A ...
INNER JOIN ... test_B ...

答案 1 :(得分:0)

因为您正在测试NULL并加入ID我假设图像只会在2个表中的1个中,这意味着Marc B的答案中的两个INNER JOIN应该更改为LEFT JOIN

SELECT COALESCE(test_B.long_image_id, test_A.long_image_id)
FROM ...
LEFT JOIN ... test_A ...
LEFT JOIN ... test_B ...

答案 2 :(得分:0)

或者....

应该能够执行以下操作:

 select *
 from test_table test
 inner join Long_image_name image on 
      (test.long_image_id IS NULL and test_A.long_image_id = image.long_image_id) or 
      (test.long_image_id IS NOT NULL and test_B.long_image_id = image.long_image_id)

我还没有对它进行全面测试,但值得一试。

旁注,从我的快速浏览,你的连接看起来不太正确。确保您通过别名或实际表名正确连接两个表。您必须根据相同的概念修复建议连接中的引用。

旁注:我已经从SQL Server 2000的思维模式中回答了这个问题,但仍然应该指出正确的方法。