
Народ, помогите решить проблему, пожалуйста.
Была задача в один SQL запрос объединить два запроса так, чтобы отбор из 2 таблиц шел по разным критериям. В один список попадают одни результаты, в другой – другие, но в выдаче их нужно объединить. Иногда данные в таблицах могут совпадать, и тогда надо вывести только 1 запись.
ОК, объединяем два sql запроса в один (условия даны для примера, в реальности всё сложнее, но это не важно):
SELECT name FROM table1 WHERE table1.field > 10
UNION
SELECT name FROM table2 WHERE table2.field < 100
В выдачу попадают только непересекающиеся результаты (потому что просто UNION, а не UNION ALL). Меня всё устраивало, пока я не решил добавить поле, в котором был бы указан источник записи (table1 или table2).
SELECT name, 1 as table_number FROM table1 WHERE table1.field > 10
UNION
SELECT name 2 as table_number FROM table2 WHERE table2.field < 100
Поскольку теперь строки не совпадают на 100%, в выдачу попадают ВСЕ строки (а не только уникальные по полю name). То есть, выдача стала такой же, как если бы я сделал UNION ALL.
Я покопал описание SQL UNION ALL в сети, но не смог найти решения. Как мне сделать так, чтобы и поле table_number осталось (пока неважно, какие именно данные там будут), и поле name не задваивалось?
Работаю с MS SQL Server.




