次の処理を行うSQLクエリを記述する必要があります。私はテーブルContact
とテーブルContactTranslations
を持っています。第一言語の翻訳が(言語ID = 1)がある場合は、タイトルを返すSQL SELECTクエリ - ロジックを使用して他のテーブルのフィールドに結合して返す
- :各連絡先の
:私はテーブル
Contact
からすべての連絡先を選択して、このロジックを持つテーブルContactTranslations
に参加する必要がありますその翻訳から(Title = "PrimaryLanguageTitle")。 - 主要言語の翻訳がない場合は、現在の連絡先の最初に翻訳されたタイトル(Title = "FirstTitle")を返します。
- 翻訳がない場合は、「翻訳なし」(タイトル=「翻訳なし」)を返します。
私のテーブルには、次のようになります。
Table: Contact +-----------+--------+ | ContactId | Active | +-----------+--------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | +-----------+--------+ Table: ContactTranslation +----------------------+-----------+-------------+----------------------+ | ContactTranslationId | ContactId | LanguageId | Title | +----------------------+-----------+-------------+----------------------+ | 1 | 1 | 1 (primary) | PrimaryLanguageTitle | | 3 | 2 | 2 | FirstTitle | +----------------------+-----------+-------------+----------------------+
連絡先1は、第一言語の翻訳を持っており、それはPrimaryLanguageTitle」を返す必要があります。
連絡先2には主要な翻訳はありませんが、他の翻訳が1つありますので、「FirstTitle」を返す必要があります。私はこれを除く任意のSQLコードを持っていない
+-----------+----------------------+--------+ | ContactId | Title | Active | +-----------+----------------------+--------+ | 1 | PrimaryLanguageTitle | 1 | | 2 | FirstTitle | 1 | | 3 | No translation | 1 | +-----------+----------------------+--------+
:それは
期待される結果 'いいえ翻訳' を返すべきではありませんので、
接触3には翻訳されていない
SELECT
Contact.ContactId AS ContactId,
IsNull(ContactTranslation.Title, 'No translation') AS Title,
Contact.Active AS Active
FROM
Contact
LEFT JOIN ContactTranslation
ON Contact.ContactId = ContactTranslation.ContactId
このコードの問題は、1人の連絡先に多数の翻訳がある場合、1人の連絡先のすべての翻訳が返されることです。上記のロジックには従いません。
のために設けられた第一言語を取得しますあなたの問題/質問のように見えるものを、作業SQLコードを持っているように見えますか? –
@FerdinandGaspar私の質問が更新されました。 – Spectarion