Присоединение к SQL Server и подстановочные знаки - PullRequest
1 голос
/ 24 мая 2010

Я хочу получить результаты левого соединения между двумя таблицами, в обеих из которых есть столбец с одинаковым именем, столбец, к которому я присоединяюсь. Следующий запрос рассматривается как допустимый мастером импорта / экспорта в SQL Server, но он всегда выдает ошибку. У меня есть еще несколько условий, поэтому размер не будет слишком большим. Мы используем SQL Server 2000 iirc, и поскольку мы используем разработанную извне программу для взаимодействия с базой данных (за исключением некоторой информации, которую мы не можем получить таким образом), мы не можем просто изменить имя столбца.

SELECT table1.*, table2.* 
FROM table1 
LEFT JOIN table2 ON table1.samename = table2.samename

По крайней мере, я думаю, что имя столбца является проблемой, или я делаю что-то еще неправильно?

Ответы [ 4 ]

0 голосов
/ 24 мая 2010

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

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

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

0 голосов
/ 24 мая 2010

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

0 голосов
/ 24 мая 2010

Поскольку вы никогда не должны использовать select *, просто замените его именами столбцов нужных вам столбцов. Столбец объединения имеет одинаковое значение (или ноль) в обеих сторонах объединения, поэтому выберите только один из них из таблицы table1, который всегда будет иметь значение.

0 голосов
/ 24 мая 2010

У одного столбца больше, чем просто ваш ключ объединения? Если только ваш ключ объединения имеет такое же имя, просто выберите одно из них, так как значения будут эквивалентны, за исключением несовпадающих строк (которые будут NULL). Вам, однако, придется перечислить все остальные столбцы из одной из таблиц.

SELECT table2.samename,table1.othercolumns,table2.*
FROM table1 
LEFT JOIN table2 ON table1.samename = table2.samename
...