Неизвестный столбец в сообщении об ошибке

Эй, ребята, я так близко, что могу представлять данные, которые я хочу отображать. 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
Другие вопросы по тегам