#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’, которое превращает строки в столбцы.