用于在同一个表中搜索值的SQL查询

时间:2014-08-14 11:57:39

标签: mysql sql

我遇到了问题。 我有一个包含这些列的表:

languageID languageItem

每一行只能有“2”或“3”作为languageID,而且languageItem总是不同,但只能使用相同的languageID。例如,我可以:

2 | header.title
2 | header.description
3 | header.description
3 | header.title

问题是现在,languageID为“3”的行少于languageID为“2”的行,我需要为每个languageID设置相同的languageItem。像:

2 | header.title
2 | header.description
2 | header.button
3 | header.title
3 | header.description

缺少“3”的header.button

我想选择languageID 2有更多的所有行,然后“复制”它们并使用languageID 3插入。

由于

编辑:这些行不仅包含这两列,还包含其他列。

3 个答案:

答案 0 :(得分:1)

您只需插入不存在的值即可。查询如下所示:

insert into table(languageId, languageItem)
    select 3, languageitem
    from table t
    where languageid = 2 and
          not exists (select 1
                      from table t3
                      where t3.languageid = 3 and t3.languageitem = t.langaugeitem
                     );

答案 1 :(得分:0)

INSERT INTO LanguageItems(languageID, languageItem)
SELECT
    3,
    WantedValues.languageItem
FROM
    LanguageItems WantedValues
    LEFT JOIN LanguageItems ExistingValues ON 
            WantedValues.languageItem = ExistingValues.languageItem 
            AND WantedValues.languageID = 2
            AND ExistingValues.languageID = 3
WHERE
    WantedValues.languageID = 2 
    AND ExistingValues.languageID IS NULL

答案 2 :(得分:0)

您可以在此处使用INSERT IGNORE:

insert ignore into mytable(languageId, languageItem)
select 3 as languageId, languageitem from mytable where languageid = 2;

(前提是在languageId + languageItem上有一个唯一索引。)