从组内加入
Inner Join from group by
我有一个 table countries
包含国家代码和名称:
name code
FRANCE FR
JAPAN JP
还有 table 的页面浏览统计数据 views
:
page_id code date etc...
34 FR 2015-01-01
34 FR 2015-01-02
34 JP 2015-01-02
我想输出该页面所在的所有国家/地区的列表,但带有国家/地区名称,所以结果应该是:FRANCE, JAPAN
我可以很容易地得到它运行的国家代码列表:
SELECT code FROM views WHERE page_id = 34 GROUP BY code;
但是将它们映射到国家 table 中的名称是困难的一点。有什么想法吗?
我已经试过了,但没用:
SELECT
countries.name as name_from_countries,
FROM
countries
INNER JOIN name_from_countries ON countries.code = views.code
WHERE
views.page_id = 34
GROUP BY
views.code
这里不需要 GROUP BY。只需使用 DISTINCT。
SELECT DISTINCT countries.name as name_from_countries
FROM countries
INNER JOIN views ON countries.code = views.code
WHERE
views.page_id = 34
您需要将 countries.name
添加到您的 GROUP BY
- 我假设您在这里有一些聚合:
SELECT v.code, c.name AS name_from_countries
FROM views v INNER JOIN countries c
ON v.code = c.code
WHERE v.page_id = 34
GROUP BY v.code, c.name;
如果您没有任何聚合(例如,COUNT(*)
),那么您可以获得至少具有一种视图的国家/地区列表,如下所示:
SELECT c.code, c.name AS name_from_countries
FROM countries c
WHERE EXISTS ( SELECT 1 FROM views v
WHERE v.code = c.code
AND v.page_id = 34 );
我有一个 table countries
包含国家代码和名称:
name code
FRANCE FR
JAPAN JP
还有 table 的页面浏览统计数据 views
:
page_id code date etc...
34 FR 2015-01-01
34 FR 2015-01-02
34 JP 2015-01-02
我想输出该页面所在的所有国家/地区的列表,但带有国家/地区名称,所以结果应该是:FRANCE, JAPAN
我可以很容易地得到它运行的国家代码列表:
SELECT code FROM views WHERE page_id = 34 GROUP BY code;
但是将它们映射到国家 table 中的名称是困难的一点。有什么想法吗?
我已经试过了,但没用:
SELECT
countries.name as name_from_countries,
FROM
countries
INNER JOIN name_from_countries ON countries.code = views.code
WHERE
views.page_id = 34
GROUP BY
views.code
这里不需要 GROUP BY。只需使用 DISTINCT。
SELECT DISTINCT countries.name as name_from_countries
FROM countries
INNER JOIN views ON countries.code = views.code
WHERE
views.page_id = 34
您需要将 countries.name
添加到您的 GROUP BY
- 我假设您在这里有一些聚合:
SELECT v.code, c.name AS name_from_countries
FROM views v INNER JOIN countries c
ON v.code = c.code
WHERE v.page_id = 34
GROUP BY v.code, c.name;
如果您没有任何聚合(例如,COUNT(*)
),那么您可以获得至少具有一种视图的国家/地区列表,如下所示:
SELECT c.code, c.name AS name_from_countries
FROM countries c
WHERE EXISTS ( SELECT 1 FROM views v
WHERE v.code = c.code
AND v.page_id = 34 );