这是我的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 :(得分: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的思维模式中回答了这个问题,但仍然应该指出正确的方法。