复杂mysql选择查询7
例如,我有表和值:复杂mysql选择查询7,mysql,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 |
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是单词的idst_id是句子的id 如果我知道两个单词的id。我想得到包含这些单词的句子列表。 例如,这个ID是2和5,那么答案将是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列添加索引,则此查询将更快是吗?
什么类型的索引比较好?
SELECT st_id
FROM words
WHERE wd_ID IN (2, 5)
GROUP BY st_id
HAVING COUNT(DISTINCT wd_ID) = 2
st\u ID
的wd\u ID
都是唯一的,那么having子句中不需要有DISTINCT
HAVING COUNT(*) = 2
您可以在这个链接上阅读更多内容
st_ID
,其中5
或2
值为wd_ID
。然后它对st\u id
进行分组,并仅过滤值为2
的记录,这是聚集行的结果,因为您正在st\u id
中搜索两个值。那么N个单词呢?你能给我个主意吗?