Внутреннее объединение - SQL Server - PullRequest
0 голосов
/ 19 марта 2012

Я использовал базу данных Northwind и протестировал следующий запрос:

SELECT *
  FROM products
  JOIN suppliers ON suppliers.supplierID = products.supplierID

и я получил красное сообщение вот так:

Сообщение 4104, Уровень 16, Состояние 1, Строка 1
Не удалось связать многокомпонентный идентификатор «products.supplierID».

Может кто-нибудь пролить свет? большое спасибо,

Ответы [ 6 ]

2 голосов
/ 19 марта 2012
SELECT suppliers.supplierID,products.supplierID
  FROM products
  JOIN suppliers ON suppliers.supplierID = products.supplierID

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

1 голос
/ 19 марта 2012

Я только что запустил скрипт db nortwind и выполнил запрос, и он работает нормально для меня.

SELECT *
FROM products
INNER JOIN suppliers ON suppliers.supplierID = products.supplierID

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

Можете ли вы выполнить приведенные ниже запросы, и они успешно работают? Третий запрос - это, по сути, соединение по-другому.

select SupplierID from Suppliers
go
select SupplierID from Products
go
select * from Products p , Suppliers s
where p.SupplierID = s.SupplierID
1 голос
/ 19 марта 2012

Моя единственная догадка, основанная на этой ошибке, и ваш запрос заключается в том, что в таблице "Продукты" отсутствует идентификатор поставщика. Я бы сначала проверил схему.

0 голосов
/ 24 апреля 2013

ваш код создает противоречивость при выборе столбцов в списке выбора с помощью «select *», он не получает, какую таблицу нужно выбрать columsn, так как есть две таблицы, использованные после из условия ... одноименные таблицы псевдонимов и использование псевдонимов имена столбцов в списке выбора вместо простых *

например.

select a.* from test a inner join xyz b on a.id=b.id
0 голосов
/ 19 марта 2012

Проверьте параметры сортировки базы данных и, если учитывает регистр, убедитесь, что вы используете имена объектов данных с учетом регистра.

0 голосов
/ 19 марта 2012

Вместо SELECT * Напишите соответствующие столбцы, которые вы хотите выбрать из обеих таблиц

как SELECT suppliers.supplierID,suppliers.name..etc

В обеих таблицах указан идентификатор поставщика, поэтому возникает ошибка.

...