1

ここでの手順がわかりません。この質問は、この質問の直接の続きです。ただし、新しい要件が導入されたため、まったく異なるソリューションが必要になる可能性があります。C'est la vie.

この新しいSQLFiddleを参照してください。

元のソリューションでは、「親要素 ID」で示されるように、その要素が「子」要素に置き換えられない限り、特定のクライアント ID のすべての要素を取得していました。

これは、通常の要素の子であるクライアント固有の要素に対してはうまく機能します。

ただし、通常の要素の子ではないクライアント固有の要素を管理する必要があります。元のクエリはそれらを取得していません。

テーブルに「NewThing」行を追加しました-クライアントIDとparent_element IDなし-しかし、それを取得するには、別の選択と結合する必要があります。これがおそらく最善の方法ではないことは承知していますが、元のクエリを修正する方法がわかりません。

したがって、上記の SQLFiddle では、「クライアント ID」パラメーター (NULL の可能性があります) を受け入れて返す単一の SQL クエリをどのように記述すればよいでしょうか。

  • クライアント ID 1 の場合、行 2、4、および 5
  • クライアント ID 2 の場合、行 3 および 4
  • クライアント ID 42 の場合、行 1 と行 4
  • クライアント ID NULL の場合、行 1 と 4
4

1 に答える 1

0

なぜこのように単純ではないのですか:

SELECT  mm.*, md.label AS standardized_label FROM mytable md
LEFT JOIN
        mytable mc
ON      mc.parent_element = md.id
        AND mc.client = 1
JOIN    mytable mm
ON      mm.id = COALESCE(mc.id, md.id)
WHERE   md.client IS NULL or (md.client = 1 and md.parent_element IS NULL)
于 2013-10-01T12:38:06.223 に答える