сложный запрос: Присоединить параметр, самосоединиться и противоречить условиям

78
12

У меня есть база данных с таблицей с именами переводов (удивительно...)

В этой таблице 4 строки: id, textidea, перевод и язык.

id является регулярным идентификатором, так как каждый первичный ключ

textidea - это идентификатор идеи слова, как изображение: когда я имею в виду "дерево", идея может быть переведена на другие языки

перевод - перевод текста

и язык - это язык перевода

Короткая функция для этой таблицы: textidea + language = translation

Не каждый textidea имеет перевод на каждом языке: у меня есть 10 языков и 1100 Textideas, но только 7000 переводов

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

упакуйте его в txt файл и можете массово перевести слова с английского на другие языки

мой sql-запрос уже работает: он не получает результата (пустой результат):

SELECT t.textidea,t.translation 

FROM translation AS t
LEFT JOIN translation AS w //table joins itself

ON t.textidea = w.textidea
WHERE (t.language = 'en-US'
AND w.language = 'de-DE' //de-DE is German and is as example
AND w.translation IS NULL //target language here
AND t.translation IS NOT NULL)

что я могу сделать в моем SQL-запросе лучше? если возможно, вы можете выполнить запрос dql, потому что im также использует доктрину

Спасибо

EDIT: если я делаю левое соединение, с меньшим количеством записей, чем основная таблица:

---------------------
|entry 1|added entry|
---------------------
|entry 2|null |
---------------------

У меня есть запись с нулем: я хочу найти эту запись

Проблема: я хочу, чтобы это был специальный язык ~, где de.language = 'de-DE'

но это исключает

→ Могу ли я присоединиться к параметру? поэтому я могу поставить "где de.language = 'de-DE" там и искать позже для null?

спросил(а) 2021-01-25T14:07:25+03:00 4 месяца, 2 недели назад
1
Решение
63

Я только что узнал:

после " JOIN " следует " ON ", и в этом мы можем указать условие соединения, но также вещи, которые мы бы поставили в " WHERE ",

это позволяет иметь индивидуальные таблицы, которые можно

sooo:

старый запрос:

SELECT t.textidea,t.translation 

FROM translation AS t
LEFT JOIN translation AS w

ON t.textidea = w.textidea
WHERE (t.language = 'en-US'
AND w.language = 'de-DE'
AND w.translation IS NULL
AND t.translation IS NOT NULL)

менять:

ON t.textidea = w.textidea AND w.language = 'de-DE'

новый рабочий запрос:

SELECT t.textidea,t.translation 

FROM translation AS t
LEFT JOIN translation AS w

ON t.textidea = w.textidea AND w.language = 'de-DE'
WHERE (t.language = 'en-US'
AND w.translation IS NULL
AND t.translation IS NOT NULL)

ответил(а) 2021-01-25T14:07:25+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема