如何基于行数联合表
例如,假设我有10个表,并且必须选择下面的前10行
如果table1有10行,则返回10行。
如果table1有5行,则合并table2并返回前10行(如果行计数>10则不合并table3等)
如果table1有3行,table2有2行,则与表3合并并返回前10行,依此类推
我当前的SQL查询如下,但这一个联合所有表并返回前10名,这是不性能(我认为)。
SELECT TOP 10 NAME FROM(
SELECT TOP 10 NAME FROM TABLE1 WHERE NAME LIKE '%abc%'
UNION
SELECT TOP 10 NAME FROM TABLE2 WHERE NAME LIKE '%abc%'
UNION
..
..
SELECT TOP 10 NAME FROM TABLE10 WHERE NAME LIKE '%abc%'
) AS RESULT
你可能需要这样的东西吗?
IF (SELECT COUNT(*) FROM A) = 3
begin
select * from A
end
else
select * from A
Union all
select * from B
演示
您可以做的是为每个表添加额外的列,指定其位置,然后按该列排序,并取前10行
SELECT TOP (10)
NAME
FROM (
SELECT NAME, 1 AS Ordering
FROM TABLE1
WHERE NAME LIKE '%abc%'
UNION ALL
SELECT NAME, 2
FROM TABLE2
WHERE NAME LIKE '%abc%'
UNION ALL
..
..
SELECT NAME, 10
FROM TABLE10
WHERE NAME LIKE '%abc%'
) AS RESULT
ORDER BY
Ordering;