Соединение сервера Sql, но соблюдайте порядок

Есть ли способ объединения двух таблиц, но сохранить строки из первой таблицы, появляющиеся сначала в наборе результатов?

Например:

Таблица1

name        surname
-------------------
John         Doe
Bob          Marley
Ras          Tafari

Table2

name       surname
------------------
Lucky      Dube
Abby       Arnold

Я хочу, чтобы результирующий набор был:

name        surname
-------------------
John         Doe
Bob          Marley 
Ras          Tafari
Lucky      Dube
Abby       Arnold

К сожалению, профсоюз каким-то образом переупорядочивает таблицу. Есть ли способ обойти это?

Ответ 1

Попробуйте следующее: -

Select * 
from
( 
Select name,surname, 1 as filter
from  Table1
Union all
Select name,surname , 2 as filter
from Table2
)
order by filter

Ответ 2

Единственный способ гарантировать порядок вывода - использовать ORDER BY:

SELECT name,surname,1 as rs
FROM table1
UNION ALL
SELECT name,surname,2
FROM table2
ORDER BY rs

Если вы не хотите, чтобы rs отображался в конечном наборе результатов, введите UNION в качестве подзапроса:

SELECT name,surname
FROM (
  SELECT name,surname,1 as rs
  FROM table1
  UNION ALL
  SELECT name,surname,2
  FROM table2
) t
ORDER BY rs

Ответ 3

;WITH cte as (
    SELECT name, surname, 1 as n FROM table1
    UNION ALL
    SELECT name, surname, 2 as n FROM table2
    UNION ALL
    SELECT name, surname, 3 as n FROM table3
)
SELECT name, surname
FROM cte
ORDER BY n;

Ответ 4

. Как это?

CREATE TABLE #Table1 (Names VARCHAR(50))
CREATE TABLE #Table2 (Names VARCHAR(50))

INSERT INTO #Table1
(
    Names
)
VALUES
    ('John Doe'), ('Bob Marley'), ('Ras Tafari') 

INSERT INTO #Table2
(
    Names
)
VALUES
    ('Lucky Dube'), ('Abby Arnold') 


SELECT ArbSeq   = 1, *
FROM #Table1
UNION ALL
SELECT ArbSeq   = 2, *
FROM #Table2
ORDER BY ArbSeq

Следует отметить, что упорядочение не гарантируется, если явно не определено. Если таблица содержит кластерный индекс, строки, как правило, возвращаются в порядке индекса, но это не гарантируется.