0

私のテーブル構造には、階層を作成するためにテーブルの Id にマップできる null 許容 ID フィールド ParentId があります。ParentId は null 可能です。親データで Id を取得できるようにしたいのですが、親が null であるすべてのデータが必要です。しかし、親がnullではない行が2倍返されることは望ましくありません。

これにはどのタイプの結合を使用できますか?

以下は、私が返したいものの例です:

Id 1 ParentId 2 -> ID 2 ParentId Null
Id 3 ParentId Null -> NULL

ParentId に ID がある場合は、行として返されるのではなく、スキップされることに注意してください。以下は Id 2 が 2 回含まれているため誤りです。左側のアイテムとしてではなく、右側にのみ含める必要があります。

Id 1 ParentId 2 -> ID 2 ParentId Null
Id 2 ParentId Null
Id 3 ParentId Null
4

1 に答える 1

0

これはあなたが探しているものですか?

SELECT t.ID, t.thingName, t.parentID, pt.thingName as parentName
FROM things t
LEFT JOIN things pt on pt.id = t.parentID

SQL Fiddle (リンク)で例を設定しました。

更新: LEFT JOIN に変更され、親を持たないレコードが引き続き表示されるようになりました。ご要望どおり、parentID が NULL でない行は 1 回だけ返されます。それでも探しているものではない場合は、明確にしてください。

于 2013-10-31T15:49:21.923 に答える