嘿伙计们,我能够代表我希望展示的数据
相关列是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表的右侧附加每个组合的价格。 请记住,stateproducts表是空的,我将如何实现这一目标?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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