Mysql 子查询 - 需要在两个类似查询之间建立连接以计算邮政编码和邮政编码的出现次数

Posted

技术标签:

【中文标题】Mysql 子查询 - 需要在两个类似查询之间建立连接以计算邮政编码和邮政编码的出现次数【英文标题】:Mysql Subquery - Need to make a connection between two like queries in order to Count Occurrences of Postal Codes and Zip Codes 【发布时间】:2011-07-08 17:44:34 【问题描述】:

我在弄清楚这一点时遇到了一些问题。我有两个查询需要放在一起,无论我尝试了什么,我总是以 mysql 语法错误告终。这两个查询如下。

查询 1 - 这是针对加拿大邮政编码的

SELECT ta.city, ta.email_address, ta.country_code, COUNT(*)
FROM jos_form_submitteddata_form1 tb
JOIN jos_postalzip_redirect ta ON UPPER(LEFT(tb.FIELD_24, 3)) = LEFT(ta.postal_zip, 3)
WHERE LENGTH(tb.FIELD_24) > 5
GROUP BY ta.city;  

查询 2 - 如果适用于美国邮政编码

SELECT ta.city, ta.email_address, ta.country_code, COUNT(*)
FROM jos_form_submitteddata_form1 tb
JOIN jos_postalzip_redirect ta ON UPPER(tb.FIELD_24) = LEFT(ta.postal_zip, 5)
WHERE LENGTH(tb.FIELD_24) <= 5
GROUP BY ta.city
HAVING ta.country_code = 'US';

目标是让这两个查询以正确的计数显示在同一个表中

【问题讨论】:

【参考方案1】:

尝试使用 UNION 语句。

http://dev.mysql.com/doc/refman/5.0/en/union.html

【讨论】:

@FredB:我认为 UNION 是最好的方法,是的。【参考方案2】:

UNION 不能满足您的需求?

SELECT ta.city, ta.email_address, ta.country_code, COUNT(*) 
FROM jos_form_submitteddata_form1 tb 
JOIN jos_postalzip_redirect ta ON UPPER(LEFT(tb.FIELD_24, 3)) = LEFT(ta.postal_zip, 3)
WHERE LENGTH(tb.FIELD_24) > 5 GROUP BY ta.city
UNION
SELECT ta.city, ta.email_address, ta.country_code, COUNT(*) 
FROM jos_form_submitteddata_form1 tb 
JOIN jos_postalzip_redirect ta ON UPPER(tb.FIELD_24) = LEFT(ta.postal_zip, 5) 
WHERE LENGTH(tb.FIELD_24) <= 5 AND ta.country_code = 'US' GROUP BY ta.city

【讨论】:

以上是关于Mysql 子查询 - 需要在两个类似查询之间建立连接以计算邮政编码和邮政编码的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

《MySQL必知必会学习笔记》:子查询

优化类似的 MySQL 子查询

MySQL数据库多表查询

包包大人小灶 子查询的小秘密

在mysql子查询的小括号包裹可以省略吗?

第06章 MySQL多表查询