Выберите записи в «объединенной» таблице, соответствующие конкретным данным и / или несуществующим данным - PullRequest
0 голосов
/ 30 сентября 2011

Я создал две таблицы для управления многоязычной системой статей:

  • table1 - таблица, которая используется в качестве индекса всех зарегистрированных статей

    table1 = (ART_ID, ART_AUTHOR, ART_DATE)

  • table2 - это таблица, которая используется для хранения версий статьи на всех языках

    table2= (LOC_ID, LOC_TITLE, LOC_TEXT, LOC_LANG, ART_ID)

Моя цель заключается в следующем:

Если я выберу английский в качестве языка;

  1. Мне нужно просмотреть статьи с существующей английской локализацией, чтобы я мог их редактировать,
    [если существует локализация, соответствующая выбранному языку, то она возвращает эту как данные таблицы2].

  2. Мне также нужно просмотреть статьи без какой-либо локализации (но индекс статьи уже существует в таблице1), поэтому я могу написать английскую версию,
    [если для статьи вообще нет локализации, то она возвращаетсяns нулевые данные как данные таблицы2] .

  3. И, наконец, мне нужно просмотреть статьи, которые уже имеют локализацию на другом языке, чтобы я мог написатьанглийская версия.
    [если локализация не соответствует выбранному языку, но существует другая локализация, то она возвращает нулевые данные в качестве данных таблицы.]

но я не смог написать хороший запрос до сих пор ...


Если я использую:

SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
       FROM table1
       LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )

, он возвращает всю статью во всехязыки, но мне нужны нулевые данные, если выбранный язык еще не локализован.Так что это нехорошо.


Если я использую:

SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
       FROM table1
       LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
       WHERE table2.LOC_LANG = 'en'

, он возвращает все статьи, написанные на английском языке, но не статьи без локализации и статьи с локализацией на другом языке.Так что это не хорошо.


Если я использую:

SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
       FROM table1
       LEFT JOIN table2 ON ( table1.ART_ID = table2.ART_ID )
       WHERE table2.LOC_LANG = 'en' OR table2.LOC_LANG IS NULL

, он возвращает всю статью, написанную на английском языке, и всю статью без локализации вообще, но не те, с локализацией в другомязык.Так что это нехорошо.


Я пытался с некоторыми подзапросами и существует или не существует, но ничего не достигло цели.

Кто-нибудь знает что-то, что я мог бы использовать, чтобы получитьэто работает?Это вообще возможно?

Спасибо.

1 Ответ

3 голосов
/ 30 сентября 2011

Попробуйте поставить условие в левом соединении:

SELECT table1.ART_AUTHOR, table1.ART_DATE, table2.LOC_TITLE, table2.LOC_TEXT
 FROM table1
 LEFT JOIN table2 ON table1.ART_ID = table2.ART_ID
                 and table2.LOC_LANG = 'en'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...