mysql-按语言id比较两行-查找不存在翻译的行

y0u0uwnf  于 2021-06-24  发布在  Mysql
关注(0)|答案(4)|浏览(411)

所有人!
我有一个表,在这里我保存了类别,每个翻译都是一个新行,有不同的语言id。

categories_id   language_id     categories_name
8032            4               Dukke
8032            10              Doll
8029            10              Bike
8074            4               Bil

我想获取那些没有语言\u id 4或语言\u id 10翻译的行。在这种情况下,输出是这样的:

categories_id   language_id     categories_name
8029            10              Bike
8074            4               Bil

frontend的最终结果是这样一个列表:

TRANSLATION 1 - TRANSLATION 2
Bike - [add translation]
[add translation] - Bil
k5hmc34c

k5hmc34c1#

更新
一个更好的解决办法是调整table的位置;如果你会有更多的语言,你只需要添加 CASE WHEN ... END 新的声明

SELECT * FROM (
    SELECT
        category_id
        ,MAX(CASE WHEN lang_id = 10 THEN category_name end) AS Translation_1
        ,MAX(CASE WHEN lang_id = 4 THEN category_name end) AS Translation_2
    FROM (SELECT category_id, category_name, lang_id from tbl) t
    group by category_id) t
WHERE Translation_1 is null OR Translation_2 is null

在这里试试。

um6iljoc

um6iljoc2#

您可以通过使用单词和语言生成所有可能的行来实现这一点。然后删除不存在的:

select c.category_name, l.language_id
from (select distinct category_name from t) c cross join
     (select distinct language_id from t) l left join
     t
     on t.category_name = c.category_name and t.language_id = l.language_id
where t.category_name is null;
mqxuamgl

mqxuamgl3#

试试这个:它应该适用于您,使用 subqueryMIN 然后使用相同的 ID 和min language_id 要检索的主要翻译是 TRANSLATION_1 然后再次加入相同的 ID 但是
not equal to language_id 检索 TRANSLATION_2 并检查状况,如果 language_id IS NULL 具体如下:

SELECT t.id, 
    t1.category_name AS TRANSLATION_1, 
    t2.category_name AS TRANSLATION_2
FROM (SELECT ID, MIN(language_id) language_id FROM test GROUP BY ID) t
LEFT JOIN test t1 ON t1.id = t.id 
    AND t1.language_id = t.language_id
LEFT JOIN test t2 ON t2.id = t.id 
    AND t2.language_id <> t.language_id
WHERE (t1.language_id IS NULL OR t2.language_id IS NULL)

输出:---如果其中一种语言为空

id  category_name   category_name
7   Dolls           NULL
p3rjfoxz

p3rjfoxz4#

如果只有两种语言,则可以将表本身连接起来。
比如:

SELECT 
  t1.ID, t1.CATEGORY_NAME, t2.CATEGORY_NAME
FROM your_table t1
LEFT JOIN your_table t2
  ON t1.ID = t2.ID
WHERE t1.LANGUAGE_ID = 1
  AND t2.ID IS NULL

对于更多的语言,您必须多次执行类似的操作。

相关问题