1

次のような2つのテーブルがあります。

メインテーブル: id (int)、タイトル (varchar) など サブテーブル: main_table_id (メインテーブルへの外部キー)、タグ (varchar) など

メイン テーブルの特定の行に対して、0 個以上のサブテーブル行が存在する可能性があります。

メイン テーブルのすべての行と、メイン テーブルの列を返すクエリを実行したいと考えています。 、それ以外の場合、それらの列では NULL です。

もちろん、基本的な LEFT OUTER JOIN を実行すると、サブテーブルの各一致に対して 1 つずつ、メイン テーブルが複数回繰り返されます。

LEFT OUTER JOIN を使用する前に、これが行われるのを見たことがあると確信しています. ただし、1時間以上グーグルで調べても解決策は得られませんでした.

ツールベルトにこのトリックを持っている人はいますか?

4

4 に答える 4

5

SQL Server を使用している場合は、TOP 句を使用できます。それが SQL Server 以外のものである場合、そのデータベースが同等のものを提供しているかどうかを確認する必要があります (それらの多くは提供しています)。このようなもの ...

Select * from Main m
left outer join 
(select top 1 * from subtable s
  where s.main_table_id = m.id) q
on q.main_table_id = m.id;

注: これは、一般的な考え方を示すためのものです。私はそれを実行する機会がなかったので、いくつかの変更が必要になるかもしれませんが、コンセプトはそこにあります.

于 2009-03-20T19:03:55.720 に答える