困难查询:连接参数,自连接和矛盾的条件

时间:2018-08-03 15:58:23

标签: mysql dql self-join

我有一个数据库,其中有一个名为translations的表。(令人惊讶...)

此表中有4行: id 文本思想翻译语言

id 是每个主键的常规ID

textidea 是该词背后的主意的ID,就像图片一样:当我指的是“树”时,该主意可以翻译成其他语言

翻译是文本想法的翻译

语言是翻译所用的语言

此表的简短功能是:textidea +语言=翻译

不是每个Textidea都有每种语言的翻译:我有10种语言和1100个Textideas,但是只有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查询,因为我也使用了教义

谢谢

编辑: 如果我正在进行左联接,且条目数少于主表:

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

我有一个条目为空:我想搜索该条目

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

但这不包括空值

->我可以加入参数吗?这样我就可以在其中放置“ where de.language ='de-DE'”,以后再搜索null?

1 个答案:

答案 0 :(得分:0)

我刚刚发现:

在“ 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)