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

Normally it will match if id = 23 exist in both tables. But it's not the case (not in t1 table) so the request return NULL values.
How i can do to return no result?

4

1 に答える 1

7

ID が両方のテーブルに存在する場合にのみ結果を一致させたい場合は、LEFT JOIN ではなく INNER 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 に答える