难查询:Join Parameter、self join、contradictive conditions

difficult query: Join Parameter, self join, and contradicting conditions

我有一个带有 table 命名翻译的数据库。(太棒了...)

在这个table中有4行:idtextideatranslation语言.

id 是每个主键的常规 id

textidea 是单词背后的想法的 id,就像图像一样:当我的意思是 'tree' 这个想法可以翻译成其他语言

translation是textidea的翻译

语言是翻译的语言

这个table的短函数是:textidea + language = translation

并非每个 textidea 都有每种语言的翻译:我有 10 种语言和 1100 个 Textidea,但只有 7000 个翻译

我的工作是从数据库中获取目标语言还没有翻译的每一个 textidea 和英文翻译

我会把它打包成一个 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 查询,因为我也在使用 doctrine

谢谢

编辑: 如果我正在做一个左连接,条目少于主要 table:

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

我有一个空条目:我想搜索那个条目

问题: 我想要一种特殊的语言~ where de.language = 'de-DE'

但这不包括 null

-> 我可以加入一个参数吗?所以我可以把 "where de.language ='de-DE'" 放在那里,稍后搜索 null?

我刚刚发现:

after 'JOIN' 跟在 'ON' 之后我们可以指定连接条件,也可以指定我们要放入的内容'哪里'

这使得定制表格成为可能,可以在

的位置进行定制

太棒了:

旧查询:

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)