0

所以,我有三个表,表“local”,表项和表“item_local”。以下是表格中包含的数据:

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

我的问题是我不知道使用 local 的 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 回答