首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >on子句错误中的未知列

on子句错误中的未知列
EN

Stack Overflow用户
提问于 2013-02-11 15:48:20
回答 3查看 429关注 0票数 1

嘿,伙计们,我非常接近于能够代表我想要显示的数据,这个列就是a.state_Id。我从我所做的研究中了解到,a.State_Id超出了我的范围。我的sql语句缺少的部分是什么?

如果我取出a.State_ID = c.State_Id,只留下b.Product_Id = c.Product_Id,那么数据就会显示出来,但是我需要与状态和产品匹配。

我知道我需要在某个地方添加另一个join,但我不确定如何添加。如果有人能帮我那就太棒了!

代码语言:javascript
运行
复制
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

已填充状态表,并包含以下字段:

代码语言:javascript
运行
复制
State_Id
State_Name
State_AbbreviatedName

已填充以包含基本产品的products表。本表有以下字段:

代码语言:javascript
运行
复制
Product_Id
Product_Name

每个州将有相同的产品,但是每个产品的价格随着每个州的不同而变化。这就是为什么我有StateProducts表的原因。此表为空,将由我创建的接口逐一填充。政治家产品表将包含以下字段

代码语言:javascript
运行
复制
State_Id //reference/relational field to be user for comparison
Product_Id //reference/relational field to be user for comparison
StateProduct_Price //new field

因此,我理解我将在price列中接收空值。

我已经能够退回一种美国的卡通产品和产品表。但是,我现在需要在这个图表的右侧为每一个组合追加价格。考虑到国产化表是空的,我怎么做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-11 15:50:51

我猜您有一个Many-to-Many关系,其中States可以有多个ProductsProducts可以在不同的States上。因此,您需要将States加入到映射表StateProducts中,以便能够在表Products上获得产品。

代码语言:javascript
运行
复制
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

若要获得更多关于联接的知识,请访问以下链接:

  • SQL连接的可视化表示

更新1

使用CROSS JOIN关键字,

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-02-11 15:53:08

从A到C,C到B。

通过为每个用户做左联接,您仍然将得到所有可能的状态,而不管是否有实际的状态产品。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2013-02-11 15:51:51

试着像这样写from子句:

代码语言:javascript
运行
复制
from StateProducts c join
     States a
     on c.state_id = c.state_id join
     Products b
     on c.product_id = b.product_id

对于笛卡尔乘积(即,获取所有状态和乘积的例子):

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14815627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档