2011-11-26 148 views
2

我有以下两个表条件字段连接查询结果

1. publisher_site_regionwise_adratio 
publisher_id | site | region | ad_ratio | product_code 
========================================================= 
001   | xyz.com | US  | 8:2  | TB 

2. publisher_site_regionwise_info 
publisher_id | site | region | regional_keywords 
======================================================= 
001   | xyz.com | US  | business, warehouse 

现在第二个表具有不PRODUCT_CODE明智的数据。网站的区域信息与具有特定区域特定网站的发布商的产品代码无关。现在我想查询,这将使我以下字段

site | region | ad_ratio | has_regional_info 
============================================ 
xyz.com | US  | 8:2  | 1 

has_regional_info列将有0或1,这取决于在特定区域内的网站是否已经regional_keywords映射与否。

我不可能想象如何使用JOIN并得到这样的结果。任何帮助将非常感激。

+0

可以在发布者(001)有一个以上的网站(xyz.com)吗?如果是这样,下面的答案也需要加入(publisher_site_regionwise_adratio.site = publisher_site_regionwise_info.site)。 – halfer

+0

@halfer沿着这些线,该地区是重复的,也可能会改变,并需要在您的加入“开”。没有太多影响我的答案,刚才提到你可能需要在'ON'子句中增加额外的列。 –

+0

@AdamWenger - 好点,是的。 – halfer

回答

1

我会采取一个简单连接到您的信息表,然后检查是否有数据在regional_keywords列,以确定您的1或0 has_regional_info

SELECT ar.site, ar.region, ar.ad_ratio 
    , CASE 
     WHEN i.regional_keywords IS NOT NULL THEN 1 
     ELSE 0 
    END AS has_regional_info 
FROM publisher_site_regionwise_adratio AS ar 
LEFT JOIN publisher_site_regionwise_info AS i ON ar.publisherId = i.publisherId 

如果publisher_site_regionwise_adratio之间的外键publisher_site_regionwise_info不仅仅是publisherId(在您的示例中很难说有3个重复列),那么只需将这些添加到ON声明中即可:AND ar.otherColumn = i.otherColumn

0
SELECT ratio.site, ratio.region, ratio.ad_ration, 
    IF(info.has_regional_info IS NULL, true, false) 
FROM publisher_site_regionwise_adratio AS ratio 
LEFT JOIN publisher_site_regionwise_info AS info 
    ON ratio.publisher_id = info.publisher_id 
0
select publisher_site_regionwise_adratio.site, 
     publisher_site_regionwise_adratio.region, 
     publisher_site_regionwise_adratio.ad_ratio, 
     LENGTH(regional_keywords)>0 as has_regional_info 
      from publisher_site_regionwise_adratio 
      join publisher_site_regionwise_info.publisher_id 
       on publisher_site_regionwise_adratio.publisher_id 
       = publisher_site_regionwise_info.publisher_id 
0

这应该这样做:

SELECT a.publisher_id, a.site, a.ad_ratio, 
    i.regional_keywords IS NOT NULL AS has_regional_keywords 
FROM publisher_site_regionwise_adratio a, publisher_site_regionwise_info i 
WHERE a.publisher_id = i.publisher_id;