根据国家和地区代码选择地区名称

时间:2014-11-19 22:52:49

标签: mysql sql

我有一个名为profile的表格,其中包含region_code列和country_code列以及另一个名为regions的表格,其中包含country_code列,region_name }和region_code。我想根据表region_name中的regionsregion_code从表country_code中选择profiles。我认为下面的代码会工作,但它总是返回一个空集,我无法弄清楚我做错了什么。任何帮助非常感谢。谢谢。

SELECT region_name 
FROM regions 
WHERE country_code IN(
                       SELECT country_code 
                       FROM profiles 
                       WHERE account_name = 'me'
                      )
AND region_code IN(
                       SELECT region_code
                       FROM profiles 
                       WHERE account_name = 'me'
                      )

3 个答案:

答案 0 :(得分:2)

听起来你想要加入?

SELECT r.region_name 
FROM regions r
JOIN profiles p ON r.country_code = p.country_code 
               AND r.region_code  = p.region_code
WHERE p.account_name = 'me'

这将列出映射到特定用户区域代码和国家/地区代码的区域的区域名称。

答案 1 :(得分:1)

我会简化您的查询,并使用类似这样的内容:

SELECT region_name
FROM
  regions
WHERE
  (country_code, region_code) IN (SELECT country_code, region_code
                                  FROM   profiles
                                  WHERE  account_name = 'me')

但是如果你仍然得到空结果,我会只执行子查询并查看它返回的行:

SELECT country_code, region_code
FROM   profiles
WHERE  account_name = 'me'

我怀疑它没有返回任何值,或者返回的值不存在于Regions表中。

答案 2 :(得分:0)

使用JOIN查询。使您的查询变得简单明了。

SELECT p.region_name
FROM region r
LEFT JOIN profile p
ON r.region_code = p.region_code
AND r.country_code = p.country_code
WHERE p.account_name = "me"

您发布的查询没问题。您没有获得任何数据的原因可能是因为您实际上没有account_name = "me"表中profile的任何数据。或者您的数据库名称可能已更改。无论如何,您的查询还可以,但JOIN更简单。