2013-06-20 3 views
4

я должен сделать UNION stament как это более или менее:Как получить имя таблицы в «выберите» заявление в SQL Server

select [table_name], name, address 
from Employees 
where [my_condition] 

UNION 

select [table_name], name, address 
from Employees_history 
where [my_condition] 

Данные получены будет либо сотрудников или Employees_history, но не в обе таблицы.

Мне нужно знать, из какой таблицы поступают данные.

ответ

8
SELECT 'Employees' AS [table_name], 
     name, 
     address 
FROM Employees 
WHERE [my_condition] 
UNION ALL 
SELECT 'Employees_history' AS [table_name], 
     name, 
     address 
FROM Employees_history 
WHERE [my_condition] 

Я использую UNION ALL, а не UNION, так как не будет никаких дубликатов через две ветви. Поэтому он может избежать ненужной работы по удалению дубликатов во всем наборе результатов.

Если бы дублирует внутри отрасли (ов) добавить DISTINCT в отдельные SELECT (s)

1

Вы можете добавить новое поле, как показано ниже:

select [table_name], name, address, 'Employees' 
from Employees 
where [my_condition] 

UNION 

select [table_name], name, address, 'History' 
from Employees_history 
where [my_condition] 

Вы можете также использовать alias как показал Мартин в своем ответе.

0

не могли бы вы сделать что-то вроде:

select 'Employees' as table_name, name, address 
from Employees 
where [my_condition] 

UNION 

select 'Employees_history' as table_name, name, address 
from Employees_history 
where [my_condition] 
0

Это может быть достигнуто Using Table Aliases

SELECT 'Employees' AS [table_name], 
     name, 
     address 
FROM Employees 
WHERE [my_condition] 

UNION 

SELECT 'History' AS [table_name], 
     name, 
     address 
FROM Employees_history 
WHERE [my_condition] 
+3

Ваш ответ фактически не использует никаких псевдонимов таблиц. –