我有一个数据库表,我想要搜索两次,第一次建立符合特定条件的条目列表,然后使用该列表限制我的第二个显示所有具有匹配“名称”的条目
以下查询可以满足我的需求,但是它需要一个简单的替代方案才能更好地运行吗?
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)
这根本不起作用,但我认为这表明了我想要做的事情的逻辑。感谢。
答案 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;
如果你的表中有数百万的数据,那么这也可能会停留一段时间。