1

クエリを書くのに助けが必要です。このスキーマを例として使用します。

Table: A
id 1
id 2

Table: ALocalized
A_id 1, culture 1, name 'EN translation'
A_id 1, culture 2, name 'PT translation'
A_id 2, culture 1, name 'EN translation'

これは、情報をローカライズするために使用しているスキーマです。A の各レコードには、 ALocalizedに少なくとも 1 つの関連レコードがありますが、特定のカルチャのローカライズされたレコードを持たない行がいくつかある場合があります。

この例では、Aにクエリを実行し、カルチャ 2 でALocalizedをフィルター処理します。カルチャ 2 が存在しない場合は、他の利用可能なものを返します。結果は次のようになります。

A_id 1, culture 2, name 'PT translation'
A_id 2, culture 1, name 'EN translation'

サブクエリを使用して両方のテーブルを結合しようとしましたが、私の問題はwhere句にあると思います。

where (ALocalized.culture = @cultureparameter OR ALocalized.culture = 1 OR ALocalized.culture = 2) limit 1

@cultureparameter が 2 の場合、カルチャ 1 が返されます。where 句の順序を尊重していません。

どうすればいいですか?ALocalizedの存在について各Aレコードをチェックするためにループの使用を避けようとしていました。

前もって感謝します

4

1 に答える 1

1
SELECT  a.*,
        COALESCE(b.culture, c.culture) Culture,
        COALESCE(b.Name, c.Name) Name
FROM    tableA a
        LEFT JOIN   tableB b
            ON a.id = b.a_id AND
                b.culture = 2
        LEFT JOIN   tableB c
            ON a.id = c.a_id AND
                c.culture = 1
于 2013-01-30T03:47:36.740 に答える