最近のプログラミングのインタビューで、私は SQL の質問をされ、それに対して妥当な答えだと思いましたが、私の答えはデータベース管理者から強い反対を受け、その理由を理解することができませんでした。
それ以来、私はこの問題についてもう少し考えてみましたが、自分の答えの何が恐ろしいのか理解できませんでした。そのため、レポートを作成するための正しい方法、または失敗した場合のより良い方法を見つけるために、ここで啓蒙を求めています。図書館のテーブルと本のテーブルを含むデータベースからのライブラリの数とその中の本の数。
文言がインタビューの質問と同じにならないように、シナリオを少し変更しましたが、タスクは同じです。
問題の最小限のスキーマを次に示します。
create table library (
id integer primary key,
name char(8)
);
create table book (
id integer primary key,
name char(8),
library_id integer,
foreign key (library_id) references library(id)
);
課題は、2 冊以上の本がある図書館について、図書館の名前とその中の本の数をリストすることです。
そして、ここに私の提案する解決策があります:
select
a.name as name,
b.nbooks as nbooks
from
library as a,
(
select
min(library_id) as library,
count(id) as nbooks
from
book
group by
library_id
) as b
where
( nbooks > 1 ) and (a.id = b.library)
;
考え直して、明示的な使用のinner join
方が良いかもしれません。それ以外に、(一般的に、または特定のデータベースに関連して) 潜在的な落とし穴と、このレポートを生成する正しい方法を教えてください。