Есть ли способ переименовать столбец с одинаковым именем из двух таблиц при выполнении объединения? - PullRequest
3 голосов
/ 10 марта 2010

У меня есть две таблицы, к которым я присоединяюсь по следующему запросу ...

select * 
  from Partners p 
inner join OrganizationMembers om on p.ParID = om.OrganizationId 
where om.EmailAddress = 'my_email@address.com' 
  and om.deleted = 0

, который прекрасно работает, но некоторые столбцы из Partners Я хочу заменить на столбцы с аналогичными именами из OrganizationMembers.Количество столбцов, которые я хочу заменить в объединенной таблице, очень мало, не должно быть больше 3.

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

select om.MemberID, 
       p.ParID, 
       p.Levelz, 
       p.encryptedSecureToken, 
       p.PartnerGroupName, 
       om.EmailAddress, 
       om.FirstName, 
       om.LastName 
 from Partners p 
inner join OrganizationMembers om on p.ParID = om.OrganizationId 
     where om.EmailAddress = 'my_email@address.com' 
       and om.deleted = 0

Но это создает очень длинную последовательность select p.a, p.b, p.c, p.d, ... etc ..., которую я пытаюсь избежать.

В итоге я пытаюсь получить несколько столбцов из Partners таблица и до 3 столбцов из таблицы OrganizationMembers без длинной последовательности спецификации столбцов в начале запроса.Это возможно или я просто сплю?

Ответы [ 4 ]

3 голосов
/ 10 марта 2010
select om.MemberID as mem

Используйте ключевое слово AS. Это называется псевдонимом.

2 голосов
/ 10 марта 2010

Но это создает очень длинную последовательность выберите p.a, p.b, p.c, p.d, ... и т. д. ... которого я пытаюсь избежать.

Не избегай этого. Обними это!

Существует множество причин, по которым лучше всего составлять список желаемых столбцов.

  • Проще искать, где используется конкретный столбец.
  • Поведение запроса более очевидно для того, кто пытается его поддержать.
  • Добавление столбца в таблицу не приведет к автоматическому изменению поведения вашего запроса.
  • Удаление столбца из таблицы нарушит ваш запрос раньше, заставит ошибки появляться ближе к источнику, и их будет легче найти и исправить.

И все, что использует запрос, в любом случае должно будет перечислить все столбцы, так что нет смысла лениться об этом!

2 голосов
/ 10 марта 2010

Вы мечтаете в своей реализации.

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

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

SELECT p.*, om.MemberId, etc..

Но это ТОЛЬКО работает, если вы хотите ВСЕ столбцы из первой таблицы, а затем выбранные элементы.

2 голосов
/ 10 марта 2010

Попробуйте это:

p.*,
om.EmailAddress, 
om.FirstName, 
om.LastName 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...