Существуют ли альтернативы ОБЪЕДИНЕНИЮ для выбора одних и тех же столбцов из нескольких таблиц?

#sql-server-2008 #syntax #wildcard

#sql-server-2008 #синтаксис #подстановочный знак

Вопрос:

У меня есть 4-5 таблиц с почти одинаковыми именами, и мне нужно выбрать из них столбцы с одинаковыми именами. Пока я делаю это:

     SELECT colA, colB FROM Table1
    UNION
    SELECT colA, colB FROM Table2
    UNION
    etc...
  

Кажется, что это может быть слишком многословно, если у вас больше, чем несколько похожих таблиц, и вам интересно, есть ли какой-либо альтернативный синтаксис. В идеале я хотел бы что-то с подстановочным знаком, например

 SELECT colA, colB FROM Table%
  

Если альтернативы нет UNION , почему бы и нет? Есть ли конкретная причина, по которой это запрещено? Я бы предположил, что это связано с тем, что SQL должен быть максимально конкретным, когда дело доходит до определений таблиц (имена таблиц, типы и т. Д.), Обеспечивая при этом гибкость в манипулировании данными (следовательно, у нас есть подстановочные знаки для строк).

Ответ №1:

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

Комментарии:

1. У меня была такая же мысль, но это не мой дизайн 🙂 Это локализованные таблицы (например, TableUK, TableUSA, TableJapan), в которые каждый день поступает много данных, поэтому они были разделены. По-видимому, это ускоряет весь процесс по сравнению с одной массивной таблицей. Я просто надеюсь, что они не добавят больше таблиц в ближайшее время!

2. @Alex: может быть, должна быть одна разделенная таблица?

3. Вы также можете создать представление с дополнительным столбцом «Страна». Но тогда UNION s войдет в код для представления…

Ответ №2:

Нет альтернативы для запроса ОБЪЕДИНЕНИЯ, разработанного поставщиком базы данных.

Ответ №3:

вы можете использовать псевдонимы таблиц. например:

 select a.colA, b.colA, a.colB, b.colB
from table1 a
  

Комментарии:

1. Это сработало бы, если бы он не хотел, чтобы каждая строка из каждой таблицы была отдельной строкой в результирующем наборе. Вы создаете столбцы.

2. в этом случае в sql server есть нечто, называемое ‘transpose’, которое превращает строки в столбцы.