我需要通过他的ID来获取用户的年龄。简单。 问题是,在我第一次不知道他们的ID时,我唯一知道的是它在一个特定的表中,让我们将其命名为“第二个”。一个查询中的两个select语句
SELECT `age` FROM `users` WHERE `userid`=(SELECT `id` FROM `second`)
我该怎么做?
我需要通过他的ID来获取用户的年龄。简单。 问题是,在我第一次不知道他们的ID时,我唯一知道的是它在一个特定的表中,让我们将其命名为“第二个”。一个查询中的两个select语句
SELECT `age` FROM `users` WHERE `userid`=(SELECT `id` FROM `second`)
我该怎么做?
您的示例
SELECT `age` FROM `users` WHERE `userid`=
(SELECT `id` FROM `second`
WHERE `second`.`name` = 'Berna')
只要你添加一个where标准就应该工作。这就是所谓的子查询,并在MySQL 5被支撑参考http://dev.mysql.com/doc/refman/5.1/en/comparisons-using-subqueries.html
SELECT age FROM users WHERE userid IN (SELECT id FROM second)
这应该工作
http://en.wikipedia.org/wiki/Correlated_subquery 再次我建议加入。 – Jordan 2012-02-20 02:56:47
你想 '在' 语句使用:
select * from a where x=8 and y=1 and z in ( select z from b where x=8 and active > '2010-01-07 00:00:00' group by z )
SELECT age FROM users inner join Second on users.UserID = second.ID
内部联接会比一个子选择
更有效并非总是如此。除了效率,还有正确性。这个查询和OP与'IN'子查询不会产生相同的结果。 – 2012-02-20 02:41:39
根据我的理解,只有当内部联接没有执行子查询时,子查询才会被优化器更改为内部联接。在这种情况下,他们当然同样运行。 出于好奇,我错过了什么,答案的领域不会是相同的? OP没有用in指定子查询,在我看来,OP正在使用一个伪代码(授予非常接近正确)来表示他/她的需求。否则,我们可能只是说 WHERE Userid =(SELECT top 1 id FROM second)' – Jordan 2012-02-20 02:53:47
'IN'与子查询和'JOIN'的区别在于Join可能产生多个结果(在这种情况下许多相同的年龄) 。如果'id'是主键,那么这不会发生。你说得对,在MySQL中,“IN”并没有以最佳方式进行优化。但总的来说,“一个JOIN会比一个子选择更有效”这句话不是事实。 – 2012-02-20 06:35:04
SELECT age FROM users WHERE userid IN (SELECT id FROM second)
但优选
SELECT u.age FROM users u INNER JOIN second s ON u.userid = s.id
只是改变=在 – Vikram 2012-02-20 02:31:00