2013-11-15 143 views
0

这是我的MySQL声明:如果ELSE或CASE在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'是一个更好的主意吗?

谢谢你的时间!

回答

0

你不能让有条件加入这样的,但你可以在更高层次上做IF()测试:

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

,因为你正在测试为NULL和连接上的ID即时通讯假设图像会仅在2个表,这意味着两个内部由马克·B中的答案JOIN的1改为LEFT JOIN

SELECT COALESCE(test_B.long_image_id, test_A.long_image_id) 
FROM ... 
LEFT JOIN ... test_A ... 
LEFT JOIN ... test_B ... 
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的思想中回答了这个问题,但仍应该指出正确的方法。