Вам необходимо указать поля, которые вы хотите вернуть. SELECT * выдаст вам все поля из обеих таблиц (включая обе, перечисленные в JOIN).
используйте логику ниже для каждого поля и исключите все, что вы не хотите возвращать.
Я также дал псевдонимы вашим таблицам, чтобы было легче следить за именами столбцов.
SELECT
t1.[columnA]
,t1.[columnB]
,t1.[columnC]
.
.
.
,t2.[columnA]
,t2.[columnB]
,t2.[columnC]
FROM dbo.table1 t1
INNER JOIN dbo.table2 t2 ON t1.[columnX] = t2.[columnY]
Альтернативой, если вы действительно не хотите перечислять все столбцы, было бы SELECT * INTO временной таблицы, удаление ненужных столбцов из временной таблицы и затем SELECT * из временной таблицы, найденный здесь ( /557624/sql-isklychaet-stolbets-ispolzuya-select-krome-columna-from-tablea) и я добавлю ниже общий сценарий на случай, если ссылка когда-либо умрет вместе с конкретной, чтобы сопоставить вашу таблицу с объединением.
Хотя это будет работать, я бы предложил использовать только SELECT * для быстрой проверки на лету, если это является частью процедуры или представления, или что-то, что используют другие процессы, SELECT * может вызвать проблемы / сбои при сбое если структура исходной таблицы (таблиц) изменяется, и последующие шаги в процессе не ожидают нового изменения. например поле удалено из источника, view больше не выбирает его как часть SELECT *, и процедура завершится ошибкой, так как ожидает его как часть задачи INSERT.
Полезное правило для меня - всегда указывать, какие столбцы мне нужны в любом запросе, кроме проверки данных на лету.
Общая версия для синтаксиса;
/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM YourTable
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN ColumnToDrop
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable
Настраиваемая версия в соответствии с вашими потребностями с объединенными таблицами;
/* Get the data into a temp table */
SELECT * INTO #TempTable
FROM [dbo].[table1] a
JOIN [dbo].[table2] b ON a.[columnX] = b.[columnY]
/* Drop the columns that are not needed */
ALTER TABLE #TempTable
DROP COLUMN [columnX]
/* Get results and drop temp table */
SELECT * FROM #TempTable
DROP TABLE #TempTable
Я нашел более элегантный способ по той же ссылке, что и выше, которую вы можете ВЫБРАТЬ * динамически с помощью нижеприведенного (опять же, я не одобряю SELECT *);
declare @cols varchar(max), @query varchar(max);
SELECT @cols = STUFF
(
(
SELECT DISTINCT '], [' + name
FROM sys.columns
where object_id = (
select top 1 object_id from sys.objects
where name = 'MyTable'
)
and name not in ('ColumnIDontWant1', 'ColumnIDontWant2')
FOR XML PATH('')
), 1, 2, ''
) + ']';
SELECT @query = 'select ' + @cols + ' from MyTable';
EXEC (@query);