Я пытаюсь получить результат КОЛИЧЕСТВА как столбец, по моему мнению. Посмотрите ниже запроса для демонстрации вида вещи, которую я хочу (это только в демонстрационных целях),
SELECT
ProductID,
Name,
Description,
Price,
(SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders
FROM tblProducts prod
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID
Это, очевидно, не работает..., но я задавался вопросом, каково корректный способ сделать это будет?
Я использую SQL Server
Ваш запрос действительно будет работать, если вы удалите соединение - оно фактически не используется, и это приведет к конфликту таблицы ord во внутреннем подзапросе выбора с таблица ord, к которой вы присоединились:
SELECT
ProductID,
Name,
Description,
Price,
(SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders
FROM tblProducts prod
В качестве альтернативы вы можете использовать объединенную таблицу вместе с Group By
:
SELECT
ProductID,
Name,
Description,
Price,
COUNT(ord.ProductID) AS TotalNumberOfOrders
FROM tblProducts prod
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID
GROUP BY
ProductID,
Name,
Description,
Price
Если вас интересуют только заказанные продукты, вы можете просто заменить операцию LEFT OUTER JOIN на INNER JOIN:
SELECT
prod.ProductID,
prod.Name,
prod.Description,
prod. Price,
COUNT(*) AS TotalNumberOfOrders
FROM tblProducts prod
INNER JOIN tblOrders ord ON prod.ProductID = ord.ProductID
Попробуйте следующее:
SELECT
ProductID,
Name,
Description,
Price,
count(*) as totalnumberoforders
FROM tblProducts prod
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID
group by
ProductID,
Name,
Description,
Price
Это будет работать:
SELECT
ProductID,
Name,
Description,
Price,
COUNT(ord.ProductId) AS TotalNumberOfOrders
FROM tblProducts prod
LEFT JOIN tblOrders ord
ON prod.ProductID = ord.ProductID
GROUP BY
ProductID,
Name,
Description,
Price
Пункт "COUNT(ord.ProductId)" гарантирует, что если заказов не найдено, TotalNumberOfOrders будет равен нулю.
[Более поздняя правка: я забыл пункт GROUP BY. Дох!]