3

我正在学习更多的 SQL,并遇到了一个“问题”,

我有两个表格,如下面的链接 http://www.sqlfiddle.com/#!2/403d4/1

编辑:由于我这个周末完成的所有 SQL 测试现在都很迟钝,所以我问错了......对不起,伙计们......

我真正想要的:

如果我有请求的语言,我想获取所有记录,如果请求的语言不在标题表中,我希望它说“”或 null...

就像我要求'de'中的所有记录一样,我想要:

1  |  ACHTUNG
2  |  NULL

如果我要'en'中的所有记录,我想要

1  |  WARNING
2  |  Ambulance

真的很抱歉问错了问题。

/* 我想要做什么:我有记录的 ID 和请求的语言。如果所选语言不存在,我希望它采用另一种语言。

就像我有:语言 = 'de' 和 id = 1 我想要'ACHTUNG',

如果我有:语言 = 'de' 和 id = 2 我想要“救护车”,因为没有 'de'... */

我该怎么做呢?

4

2 回答 2

1

http://www.sqlfiddle.com/#!2/403d4/89

SELECT rec.id, title.name
FROM Records rec
LEFT JOIN Titles title ON title.record_id = rec.id and title.language='de';

SELECT rec.id, title.name
FROM Records rec
LEFT JOIN Titles title ON title.record_id = rec.id and title.language='en';


ID  NAME
1   ACHTUNG
2   (null)

ID  NAME
1   Warning
2   Ambulance
于 2012-11-11T19:37:53.793 回答
0

您可以应用自定义订单并仅返回第一行,如下所示:

SELECT
    rec.id,
    title.language,
    title.name

FROM Records rec

LEFT JOIN Titles title
ON title.record_id = rec.id

WHERE rec.id = 1
ORDER BY Field(title.language, "de") DESC
LIMIT 1

此查询首先返回具有所需语言的记录(如果存在)。如果没有,它只会返回找到的内容。您可能想看看这个答案

于 2012-11-11T19:40:33.070 回答