首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >减去mysql查询结果

减去mysql查询结果
EN

Stack Overflow用户
提问于 2013-01-11 03:17:31
回答 4查看 973关注 0票数 0

我正在尝试从两列中减去查询结果。

表:

代码语言:javascript
运行
复制
 id |   word1   | lang1 |   word2   | lang2 |
----+-----------+-------+-----------+-------+
  1 | car       |   1   | car       |  15   |
  2 | table     |   1   | table     |  15   |
  3 | Chair     |   1   | cahair    |  13   |
  4 | CDplayer  |  15   | CDplayer  |   1   |
  5 | car       |   1   | car       |  13   |

我想要获取语言1中所有尚未翻译成语言12的word1单词。因此,在这种情况下,它将是主席

表中有300万行,运行以下查询需要1分钟:

代码语言:javascript
运行
复制
SELECT DISTINCT word1 
FROM `translations` 
WHERE lang1 = 1 
  AND lang2 != 15 
  AND NOT IN (SELECT word1 FROM `translations` WHERE lang2 == 15) 
LIMIT 10

分别对这两行执行select操作非常快0.006s,然后我可以在PHP中使用array_diff()将它们相减,但在MySQL中可能有一种更简单的方法来直接做这件事。

EN

Stack Overflow用户

回答已采纳

发布于 2013-01-11 04:23:35

代码语言:javascript
运行
复制
SELECT 
    origin.word1
FROM 
    ( SELECT DISTINCT word1
      FROM tableX 
      WHERE lang1 = 1
    ) AS origin
WHERE 
    NOT EXISTS
      ( SELECT *
        FROM tableX AS trans
        WHERE trans.lang1 =  1
          AND trans.lang2 = 15
          AND trans.word1 = origin.word1
      ) ;

在运行这些查询之前,我会在(lang1, word1)(lang1, lang2, word1) 上添加一个索引。

您也可以尝试此变体(并检查两个解释计划):

代码语言:javascript
运行
复制
SELECT DISTINCT
      word1
FROM 
      tableX AS origin
WHERE 
      lang1 = 1
  AND 
      NOT EXISTS
      ( SELECT *
        FROM tableX AS trans
        WHERE trans.lang1 =  1
          AND trans.lang2 = 15
          AND trans.word1 = origin.word1
      ) ;
票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14265596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档