MySQL子查询:对同一表优化的多个查询

时间:2015-10-26 16:35:29

标签: mysql subquery

我有一个数据库表,我想要搜索两次,第一次建立符合特定条件的条目列表,然后使用该列表限制我的第二个显示所有具有匹配“名称”的条目

以下查询可以满足我的需求,但是它需要一个简单的替代方案才能更好地运行吗?

SELECT * FROM voting WHERE name IN (SELECT name FROM voting WHERE yob=15)

我也试过了,

SELECT * FROM voting WHERE name = (SELECT name FROM voting WHERE yob=15)

这根本不起作用,但我认为这表明了我想要做的事情的逻辑。感谢。

2 个答案:

答案 0 :(得分:1)

您可以切换为使用exists

SELECT v.*
FROM voting v
WHERE EXISTS (SELECT 1 FROM voting v2 WHERE v2.name = v.name AND yob = 15);

对于此查询,您需要voting(name, yob)上的索引。

答案 1 :(得分:0)

你也可以试试这个,但应该有索引。

SELECT a.* FROM voting a JOIN
(SELECT DISTINCT NAME FROM voting WHERE yob=15) AS b
WHERE a.name = b.name;

如果你的表中有数百万的数据,那么这也可能会停留一段时间。