复杂的mysql选择查询7

时间:2013-09-25 14:03:46

标签: mysql

例如,我有表格和值:

CREATE TABLE IF NOT EXISTS `words` (
  `wd_id` int(11) NOT NULL,
  `st_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

----------------------------
|    wd_id    |    st_id    |
----------------------------
|      2      |     4       |
----------------------------
|      5      |     4       |
----------------------------
|      7      |     8       |
----------------------------
|      2      |     8       |
----------------------------
|      7      |     9       |
----------------------------
|      2      |     10      |
----------------------------
|      5      |     10      |
----------------------------

wd_id是单词的id  st_id是句子的id

如果我知道两个单词的id。我想得到有这个词的句子列表。 例如,这个ID是2和5,那么ANSWER将是4和10。

在这张表中会有数百万行。所以我需要仔细查询!!!

这是我写的查询:

  SELECT st_id 
  FROM words
  WHERE wd_id = 5 AND st_id IN (
      SELECT st_id
      FROM words
      WHERE wd_id = 2
    ) 

有人能写得更好吗?或者对于N个字有效吗?
如果我为wd_id和st_id COLUMNS添加了索引,这个查询会更快吗?
什么类型的指数会好?

1 个答案:

答案 0 :(得分:0)

SELECT  st_id
FROM    words
WHERE   wd_ID IN (2, 5)
GROUP   BY st_id
HAVING  COUNT(DISTINCT wd_ID) = 2

如果wd_ID对于每个st_id都是唯一的,则您不需要在having子句中包含DISTINCT

HAVING  COUNT(*) = 2

您可以在此链接上阅读更多内容,