从组内加入

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 );