Оператор С# SELECT, SQL-запрос

Я пытаюсь получить все продукты из таблицы Products и в то же время извлекать таблицу Company_Name из Company. Общий столбец в моей таблице - Company_Id.

Я использую этот запрос:

SELECT 
 products.product_id, 
 products.product_name, 
 products.product_desc, 
 products.unit_price, 
 products.stock_level, 
 products.product_image, 
 products.gender, 
 products.type_of_acct, 
 products.product_cname, 
 products.product_cdesc, 
 products.company_id, 
 company.company_name 
FROM
 products 
INNER JOIN 
 company ON products.company_id = company.company_id

Однако это только показывает все продукты определенной компании.

Мне нужно показать все продукты.

4 ответа

Кажется, у вас есть необязательная связь, поэтому используйте LEFT JOIN:

....
FROM Products 
LEFT JOIN Company 
ON Products.Company_Id = Company.Company_Id

Это возвращает все продукты, связанные с действительной компанией, или нет.

Я думаю, вам также нужно просмотреть свои данные и проверить, правильно ли установлены ваши внешние ключи и правильные данные.


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

SELECT Products.Product_ID, Products.Product_Name, Products.Product_Desc, Products.Unit_Price, Products.Stock_Level, Products.Product_Image, Products.Gender, Products.Type_Of_Acct, Products.Product_CName, Products.Product_CDesc, Products.Company_Id, Company.Company_Name 
FROM Products 
LEFT JOIN Company ON Products.Company_Id = Company.Company_Id


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

SELECT 
 Products.Product_ID, Products.Product_Name, Products.Product_Desc,
 Products.Unit_Price, Products.Stock_Level, Products.Product_Image, 
 Products.Gender, Products.Type_Of_Acct, Products.Product_CName, 
 Products.Product_CDesc, Products.Company_Id, Company.Company_Name 
FROM
 Products 
LEFT JOIN 
 Company ON Products.Company_Id = Company.Company_Id

Это вернет вам все продукты со своей связанной компанией, если таковые имеются, NULL будет отображаться под Company.Company_Name иначе


Левое соединение - лучшее решение для вас.

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

SELECT 
 Products.Product_ID, Products.Product_Name, 
 Products.Product_Desc, Products.Unit_Price, 
 Products.Stock_Level, Products.Product_Image, 
 Products.Gender, Products.Type_Of_Acct, 
 Products.Product_CName, Products.Product_CDesc, 
 Products.Company_Id, 
 dbo.GetCompanyNameFromCompanyID(Products.Company_Id) AS Company_Name 
FROM 
 Products

licensed under cc by-sa 3.0 with attribution.