Неизвестный столбец в сообщении об ошибке
Эй, ребята, я так близко, что могу представлять данные, которые я хочу отображать. a.state_Id
, Из проведенного мною исследования я понимаю, что a.State_Id
выходит за рамки Что пропущено в моем заявлении sql?
Если я достану a.State_ID = c.State_Id
оставив только b.Product_Id = c.Product_Id
затем данные отображаются, но мне нужно сопоставить с состоянием и продуктом.
Я знаю, что мне нужно добавить в другой join
где-то, но я не уверен, как. Если бы кто-нибудь мог мне помочь, это было бы здорово!
SELECT a.state_id,
a.state_name,
a.state_abbreviatedname,
b.product_id,
b.product_name,
c.stateproduct_price
FROM states a,
products b
LEFT OUTER JOIN stateproducts c
ON a.state_id = c.state_id AND b.product_id = c.product_id
Обновление 1
Таблица состояний заполнена и содержит следующие поля:
State_Id
State_Name
State_AbbreviatedName
Таблица Products, которая была заполнена, чтобы содержать базовые продукты. Эта таблица имеет следующие поля:
Product_Id
Product_Name
В каждом штате будут одни и те же продукты, однако цена каждого продукта меняется в зависимости от каждого штата. Вот почему у меня есть таблица StateProducts. Эта таблица пуста и будет заполнена один за другим интерфейсом, который я создал. Таблица StatesProducts будет иметь следующие поля
State_Id //reference/relational field to be user for comparison
Product_Id //reference/relational field to be user for comparison
StateProduct_Price //new field
так что я понимаю, что я получу значения NULL в столбце цены.
Я был в состоянии вернуть своего рода продукт картеза из таблицы состояний и продуктов. Однако теперь мне нужно добавить цену для каждой комбинации в правой части таблицы. имея в виду, что таблица stateproducts пуста, как мне это сделать?
3 ответа
Я думаю, у вас есть Many-to-Many
отношения, в которых States
может иметь несколько Products
а также Products
может быть по разному States
, Так что вам нужно присоединиться States
в таблицу сопоставления StateProducts
так что вы можете получить продукты на стол Products
,
SELECT a.State_ID,
a.State_Name,
a.State_AbbreviatedName,
b.Product_Id,
b.Product_Name,
c.StateProduct_Price
FROM States a
INNER JOIN StateProducts c
ON a.State_ID = c.State_Id
INNER JOIN Products b
ON b.Product_Id = c.Product_Id
Чтобы получить дополнительные сведения о соединениях, перейдите по ссылке ниже:
ОБНОВЛЕНИЕ 1
использование CROSS JOIN
ключевое слово,
SELECT a.state_id, a.state_name, a.state_abbreviatedname, b.product_id, b.product_name, c.stateproduct_price
FROM states a
CROSS JOIN products b
LEFT OUTER JOIN stateproducts c
ON a.state_id = c.state_id AND
b.product_id = c.product_id
От А до С, от С до Б.
Выполнив LEFT JOIN для каждого, вы все равно получите все возможные состояния, независимо от наличия фактических продуктов состояния.
SELECT
a.State_ID,
a.State_Name,
a.State_AbbreviatedName,
b.Product_Id,
b.Product_Name,
c.Product_Price
FROM
States a
LEFT JOIN StateProducts c
ON a.State_ID = c.State_Id
LEFT JOIN Products b
ON c.Product_Id = b.Product_Id
Попробуйте написать предложение from следующим образом:
from StateProducts c join
States a
on c.state_id = c.state_id join
Products b
on c.product_id = b.product_id
Для декартового произведения (то есть, чтобы получить все примеры состояний и продуктов):
SELECT s.state_id, s.state_name, s.state_abbreviatedname,
p.product_id, p.product_name,
sp.stateproduct_price
from States s cross join
Products p left outer join
StateProducts sp
on sp.state_id = s.state_id and
sp.product_id = p.product_id