3

私はもう少しSQLを学んでいて、「問題」に遭遇しました。

以下のリンクのような 2 つの表があります http://www.sqlfiddle.com/#!2/403d4/1

編集:私は今週末に行ったすべてのSQLテストからかなり遅れているので、本当に間違った質問をしました...申し訳ありません...

私が本当に欲しかったもの:

要求された言語があれば、すべてのレコードを取得したいのですが、要求された言語が titles-table にない場合は、"" または null...

「de」のすべてのレコードを要求する場合のように、次のものが必要です。

1  |  ACHTUNG
2  |  NULL

そして、「en」のすべてのレコードを要求すると、

1  |  WARNING
2  |  Ambulance

間違った質問で本当に申し訳ありません。

/* やりたいこと: レコードの ID と要求された言語を持っています。選択した言語が存在しない場合は、他の言語を使用したいと考えています。

私が持っている場合のように: language = 'de' and id = 1 I want 'ACHTUNG',

ある場合: language = 'de' and id = 2 'de' がないため、"Ambulance" が必要です... */

どうすればいいですか?

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 に答える