2
SELECT t1.id, t1.name, t1.population, CAST(SUM(t2.town_1) AS CHAR) AS town, CAST(SUM(CASE WHEN t2.id LIKE 23 THEN 1 ELSE 0 END) AS CHAR) AS population FROM area1 t1 LEFT JOIN area2 t2 ON t1.id = t2.id WHERE t1.id like 23

通常,如果两个表中都存在 id = 23,它将匹配。但事实并非如此(不在 t1 表中),因此请求返回 NULL 值。
我该怎么做才能不返回结果?

4

1 回答 1

7

如果您只希望在两个表中都存在 ID 的情况下匹配结果,那么您正在寻找 INNER JOIN 而不是 LEFT JOIN。


编辑:

再想一想,这是因为您的聚合函数(SUM)。您将它们转换为 CHAR(甚至不知道您可以这样做)。您应该使用GROUP BY. 试试这个:

SQL小提琴

SELECT
  t1.id,
  t1.name,
  t1.population,
  SUM(t2.town_1) AS town,
  SUM(CASE WHEN t2.id LIKE 23 THEN 1 ELSE 0 END) AS population
FROM
  area1 t1
  INNER JOIN area2 t2
    ON t1.id = t2.id
WHERE
  t1.id like 23
GROUP BY
  t1.id,
  t1.name,
  t1.population

在旁注中,like您的 WHERE 子句中不需要。=你拥有它的方式,它和一个标志做同样的事情。

于 2013-07-03T20:02:37.937 回答