アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。
皆様の知恵をお貸しください。

SQLクエリアナライザとPHPで作成

[Aside]
No
1
1
3
2
1

[Bside]
No BName
1 test1
2 test2
3 test3
4 test4

AsideのNoとBsideのNoが同じもので、
AsideはBsideのものが何回使われたかの記録です。

Bsideのデータ+何回使われたかの合計を出したいのです。

No BName Count
1 test1 3
2 test2 1
3 test3 1
4 test4 0

こういう表示をしたいのですが、

今書いているSQLがこういう風↓です
SELECT
B.No
,B.BName
,COUNT(*) AS Count
FROM
Aside AS A left JOIN Bside AS B ON
A.No = B.No
WHERE
A.No = B.No
GROUP BY
B.No
,B.BName

これだと
No BName Count
1 test1 3
2 test2 1
3 test3 1
使われている1・2・3だけ出て、4は出ません。
一つのSQLで、使われていない4も一緒に出す書き方を教えてください。

A 回答 (2件)

SELECT


B.No
,B.BName
,COUNT(a.no) AS Count
FROM
Aside AS A right JOIN Bside AS B ON A.No = B.No
GROUP BY
B.No
,B.BName
では

この回答への補足

早い回答ありがとうございます!

頂いた方法を試してみたのですが、
使われていないものまでcountが1になってしまいました…使われていないものは0にしておきたいのですが、できるのでしょうか…?

考えてくださってありがとうございました!

補足日時:2008/05/29 18:01
    • good
    • 0

回答のSQLをそのまま使っていますか?


create table aside
(
no int
)

insert into aside values (1);
insert into aside values (1);
insert into aside values (3);
insert into aside values (2);
insert into aside values (1);

create table bside
(
no int,
bname varchar(10)
)

insert into bside values ( 1,'test1');
insert into bside values ( 2,'test2');
insert into bside values ( 3,'test3');
insert into bside values ( 4,'test4');

SELECT
B.No
,B.BName
,COUNT(a.no) AS Count
FROM
Aside AS A right JOIN Bside AS B ON A.No = B.No
GROUP BY
B.No
,B.BName

No BName Count
----------- ---------- -----------
1 test1 3
2 test2 1
3 test3 1
4 test4 0
にこちらの環境ではなります。
回答の「count(a.no)」を「count(*)」や「count(b.no」にするとcountが
1になります。
    • good
    • 0
この回答へのお礼

nora1962さんのおっしゃる方法でできました。
変な結果になった原因は、いじっている時に間違えて「count(b.no)」にしてしまっていた事でした。
お騒がせしてすみませんでした…。

正しい書き方だけでなく、「count(*)」、「count(b.no)」など結果が1になってしまう可能性を教えてくださり、とても助かりました。
ありがとうございました!

お礼日時:2008/05/31 00:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!