嘿伙计们,我已经很接近能够表示我希望显示的数据了
有问题的列是 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
已填充的产品表包含基本产品。该表有以下字段:
Product_Id
Product_Name
每个州都会有相同的产品,但每种产品的价格会因每个州而异。这就是为什么我有 StateProducts 表。该表是空的,将由我创建的接口(interface)一一填充。 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 表是空的,我将如何实现这一点?
最佳答案
我猜您有一个多对多
关系,其中States
可以有多个Products
和Products
> 可以位于不同的状态
。因此,您需要将 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
关于mysql - on 子句错误中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815627/