0

したがって、テーブル「local」、テーブルitem、テーブル「item_local」の3つのテーブルがあります。テーブルに含まれるデータは次のとおりです。

Table "local"
    ID  Local
    1   Ru
    2   En

Table "item"
    ID  Name
    1   Test1
    2   Test2
    3   Test3

Table "item_local"  
    ID  ItemID  LocalID Text
    1   1       1       Test-Ru
    2   1       2       Test-En
    3   2       1       Test-Ru
    4   2       2       Test-En
    5   3       1       Test-Ru

私の問題は、次のような結果を表示するローカルでの SELECT クエリがわからないことです。

Result if i select with local "Ru":
    ID  ItemID  LocalID Text
    1   1       1       Test-Ru 
    3   2       1       Test-Ru 
    5   3       1       Test-Ru

Result if i select with local "En": 
    ID  ItemID  LocalID Text
    2   1       2       Test-En
    4   2       2       Test-En
    5   3       1       Test-Ru

そのような結果を取得するためのクエリまたはその他の方法はありますか?

とにかく、助けてくれてありがとう。

4

1 に答える 1

2
SELECT il.ID, il.ItemID, il.LocalID, il.Text
FROM item i
JOIN local l ON l.Local='Ru'
[LEFT] JOIN item_local il ON i.ID=il.ItemID AND il.LocalID=l.ID

テーブルitemは必須ではないことに注意してください。ただし、ステップで欠落しているエントリを確認したいと思います。これは、を使用しLEFT JOINて条件を追加することで実行できますWHERE il.ID IS NULL

編集:ああ、「Ru」へのフォールバックを見逃しています。

-- try 'En'
SELECT il.ID, il.ItemID, il.LocalID, il.Text
FROM item_local il
JOIN local l ON l.Local='En' AND l.ID=il.LocalID
UNION
-- fallback to 'Ru'
SELECT il.ID, il.ItemID, il.LocalID, il.Text
FROM item_local il
JOIN local l ON l.Local='Ru' AND l.ID=il.LocalID
WHERE il.ItemID NOT IN (
    SELECT il.ItemID
    FROM item_local il
    JOIN local l ON l.Local='En' AND l.ID=il.LocalID
)
于 2012-05-26T08:37:00.820 に答える