如何使用冗余列值连接两个表?

时间:2014-03-14 10:08:25

标签: mysql sql

我有两个名为ServiceIOD和ServiceSubs的表,它们之间只有一个名为ShortCode的列是常见的。因此,当我尝试连接这两个表来获得某些给定短代码的组合结果时,它没有给我正确的输出。可能是因为ShortCode列保存了两个表的冗余数据。例如,我们可以在两个表中多次找到shortcode = 36788多行。我到目前为止尝试的查询如下:

 SELECT distinct serviceIOD.keyword, 
        serviceIOD.shortcode 
   FROM serviceIOD 
        INNER JOIN serviceSubs 
            ON serviceIOD.shortcode = serviceSubs.shortcode 
            AND serviceIOD.shortcode = 36788

非常感谢大家给予的任何帮助。谢谢。

更新:

错误输出的说明:当我通过此查询加入shortcode 36788时,我总共得到24行但是当我在shortocde 36788的两个表中单独查询时,我得到24行ServicesIOD表和ServicesSubs表的3行。共27行。但是当我加入上面的查询时,我只得到24行。

3 个答案:

答案 0 :(得分:0)

尝试此代码。通常UNION避免重复条目。

(SELECT serviceIOD.keyword, 
serviceIOD.shortcode 
FROM serviceIOD) 
UNION (select * from serviceSubs)
WHERE serviceIOD.shortcode = 36788

答案 1 :(得分:0)

Inner Joinshortcode 36788,过滤两个表之间匹配的行,并且知道您已经在serviceSubs表上进行了测试并得到{ {1}}行,加入的结果也是3行,但是您在3select distinct上执行了keyword,因此此查询会查找shortcode值为36788的独特keyword,这就是您获得shortcode行的原因。

如果我错了,请告诉我,我可以将其删除。

答案 2 :(得分:0)

我已通过以下查询解决了这个问题:

 SELECT serviceIOD.keyword, 
 serviceIOD.shortcode 
 FROM serviceIOD where shortcode = 36788
 UNION select serviceSubs.keyword, 
 serviceSubs.shortcode  from serviceSubs where shortcode = 36788

感谢大家花了宝贵的时间帮我解决问题。特别感谢@Optimuskck,因为我从他建议的答案中得到了答案。