难查询:连接参数、自连接和矛盾条件

3npbholx  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(407)

我有一个数据库和一个名为translations的表
此表中有4行:id、textidea、translation和language。
id是每个主键的常规id
textidea是单词后面想法的id,就像一个图像:当我指的是“树”时,这个想法可以翻译成其他语言
翻译就是文本思想的翻译
语言是翻译中的语言
此表的简短函数是: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查询,因为我也在使用原则
谢谢
编辑:如果我正在执行左联接,且入口数比主表少:

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

我有一个空的条目:我想搜索那个条目
问题:我想要一种特殊的语言~where de.language='de'
但这不包括null
->我可以用参数连接吗?所以我可以把“where de.language='de-de'”放在那里,然后搜索null?

pkmbmrz7

pkmbmrz71#

我刚发现:
在'join'之后是'on',在这里我们可以指定连接条件,但也可以在'where'中指定
这使得定制table成为可能,可以在哪里定制
苏欧:
旧查询:

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)

相关问题