1

嘿伙计们,我非常接近能够表示我希望显示的数据有问题的列是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 值。

我已经能够返回美国和产品表的一种 cartesion 产品。但是,我现在需要在此 cartesion 表的右侧附加每个组合的价格。记住 stateproducts 表是空的,我将如何做到这一点?

4

3 回答 3

2

我猜你有一个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
于 2013-02-11T15:50:51.130 回答
2

从A到C,C到B。

通过为每个执行 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
于 2013-02-11T15:53:08.143 回答
0

尝试像这样编写 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
于 2013-02-11T15:51:51.403 回答