_TABLE_A
id | name |
---|---|
1 | user_1 |
2 | user_2 |
3 | user_3 |
4 | user_4 |
5 | user_5 |
_TABLE_B
id | update_date | comment |
---|---|---|
1 | 2020/10/07 | コメント1 |
1 | 2020/10/08 | コメント2 |
1 | 2020/10/09 | コメント3 |
1 | 2020/10/10 | コメント4 |
1 | 2020/10/11 | コメント5 |
上記の「_TABLE_A」と「_TABLE_B」の2つのテーブルからIDごとの件数を取得したいと考えています。
例えば、
SQL
1select count(*) 2from _TABLE_A LEFT OUTER JOIN _TABLE_B on _TABLE_A.id = _TABLE_B.id 3where _TABLE_A.id = '1' 4and '2020/10/07' <= _TABLE_B.update_date 5and '2020/10/08' >= _TABLE_B.update_date
のSQLを実行すると「2」という結果になりますが、
こうではなく、
_TABLE_Bの結果のupdate_dateの結果を無視して、「1」という結果を取得したいです。
「group by」や「distinct」を使うと成功できるという記事も読みましたがうまくいきません。
「_TABLE_A」と「_TABLE_B」は下記のSQLで作成しています。
SQL
1create table _TABLE_A ( 2 id character varying(1) not null 3 , name character varying(10) not null 4 , primary key (id) 5);
SQL
1create table _TABLE_B ( 2 id character varying(1) not null 3 , update_date timestamp(6) without time zone not null 4 , comment character varying(20) not null 5 , primary key (id, update_date) 6);
何か良い方法があれば教えてください。
ごめんなさい、意図が読めないのですが、
_TABLE_Bの結果のupdate_dateの結果を無視したいのに
where句に以下のような処理を入れているのはなぜでしょうか?
and '2020/10/07' <= _TABLE_B.update_date
and '2020/10/08' >= _TABLE_B.update_date
検索条件にidの指定と更新日付を使用しているためになります。
例えば、where句の指定が
_TABLE_A.id = '1'
and '2020/10/01' <= _TABLE_B.update_date
and '2020/10/01' >= _TABLE_B.update_date
の場合は結果を「0」と表示したいです。
上記の場合は0になりませんか?
update_dateに2020/10/01がないので。
はいそうです。
つまり、idとupdate_dateの両方を検索条件にしたいと考えています。
例えば、_TABLE_Bにidが「2」、update_dateが「2020/10/01」の行が存在した場合も「0」と表示したいと考えています。
え~と。。
要は検索条件に引っかかるのに0にしたいということですか??
countから-1するのはだめです?
うまく伝わらなくてすいません。
21:25に記載した通り、update_dateが条件を満たしていても、idの方が条件を満たしていないため、結果が0になっています。
検索条件には引っかかっていません。
回答1件
あなたの回答
tips
プレビュー