我有一个名为profile
的表格,其中包含region_code
列和country_code
列以及另一个名为regions
的表格,其中包含country_code
列,region_name
}和region_code
。我想根据表region_name
中的regions
和region_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'
)
答案 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更简单。