MySQL - 加入视图和表

时间:2016-12-19 22:45:58

标签: mysql sql join left-join

我有一个名为“xml_links”的视图,其格式如下

model_number  fk_link            sd_link
10R46         www.fk.com/10R46   www.sd.com/10R46
10R47         www.fk.com/10R47   www.sd.com/10R47

还有一张名为“prohub”的表格

page_url            fk_price      sd_price
www.fk.com/10R46    $155    
www.sd.com/10R46                  $161
www.fk.com/10R47    $117    
www.sd.com/10R47                  $146

我正在尝试使用以下查询加入他们,我得到的只是空白表。

select 
    xml_links.model_number, 
    prohub.fk_price, 
    prohub.sd_price
from 
    xml_links, prohub

    where 
        xml_links.fk_link=prohub.page_url
        and 
        xml_links.sd_link=prohub.page_url

我正在寻找以下结果:

model_number   fk_price   sd_price
10R46          $155             $161 
10R47          $117             $146 

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

他们查询您正在寻找

SELECT model_number, 
   (SELECT flipkart_price FROM pro_hub WHERE page_url=flipkart_link and flipkart_price is not null),
   (SELECT snapdeal_price FROM pro_hub WHERE page_url=snapdeal_link and snapdeal_price is not null)

   FROM xml_links

但这对于需要规范化的数据库来说真是一个拼凑的解决方案

您真正想要的解决方案

重新设计你的桌子。

在适当的RDBMS中,没有重复数据。在您的数据库中,像'www.fk.com/10R46'这样的值不仅仅在一个表中重复(这在两个表中很糟糕)。

其次,您将值存储在列中而不是行中。只要你只有两家供应商,我给你的解决方案就会很好,但是当你添加第三家供应商时会发生什么?你需要在两个表中添加第三列。如果你有数百万条记录,这可能需要几个小时,在此期间网站将没有响应。

答案 1 :(得分:0)

这是怎么回事,这是你需要的吗?

select
  model_number
, sum(fk_price) as fk_price
, sum(sd_price) as sd_price
from xml_links xml
INNER JOIN prohub pro
  on right(pro.page_url, 5) = xml.model_number
GROUP BY model_number;

enter image description here