我有三个表具有相同的列
table 1
col1 col2 col3 col4
table 2
col1 col2 col3 col4
table 3
col1 col2 col3 col4
如果在table1上找不到记录,则必须执行搜索,然后仅在table2中进行搜索,如果在table2中找不到,则转到table3。但是,如果在这些表中的任何一个表中找到记录,则对col4进行一些计算并返回col4而无需进一步执行。我正在使用DB2,但找不到确切的解决方案。我怎样才能做到这一点?
如果要将其保留为一个查询,则可以使用UNION ALL
来获取正确的表:
SELECT col4, 1 as SortCol
FROM Table1
WHERE col1 = 'whatever'
UNION ALL
SELECT col4, 2 as SortCol
FROM Table2
WHERE col1 = 'whatever'
UNION ALL
SELECT col4, 3 as SortCol
FROM Table3
WHERE col1 = 'whatever'
ORDER BY SortCol
FETCH 1 ROW ONLY;
编辑另一种方法是可能的。我必须说,我不确定来自SQL Server的确切语法,但这将是这样的:
SELECT COALESCE(t1.col4, t2.col4, t3.col4)
FROM (VALUES (@col1, @col2) ) v(col1, col2)
LEFT JOIN Table1 t1 ON t1.col1 = v.col1 AND t1.col2 = v.col2
LEFT JOIN Table2 t2 ON t2.col1 = v.col1 AND t2.col2 = v.col2
AND t1.col4 IS NULL
LEFT JOIN Table3 t3 ON t3.col1 = v.col1 AND t3.col2 = v.col2
AND t1.col4 IS NULL AND t2.col4 IS NULL;
想法是使用VALUES
子句(或SELECT
带有no的a FROM
)作为驱动行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句