将列值与嵌套选择进行比较

时间:2013-09-01 20:48:49

标签: php mysql select

例如,我需要通过帖子id找到用户。用户和帖子的数据库可能如下所示:

Users:

 id | username | password
 ---+----------+---------
   1|      John|     ****
   2|       Eve|     ****
   3|      Rich|     ****

Posts:

 id | author_id | contents
 ---+-----------+---------
   1|          1| I'm John
   2|          2|  I'm Eve
   3|          3| I'm Rich
   4|          3| It's Rich not rich, keep that on mind...

我的情况与发布< - >用户情况略有不同,因为在我的情况下,我不需要任何有关帖子的信息。
所以根据以上内容,并借助我发现的一些随机帖子(MySql问题,我从来不知道在google上搜索什么)我认为我的查询应该是这样的:

SELECT username, id 
FROM `user` 
WHERE id IN (SELECT author_id FROM `post` WHERE author=$MYID)

这不起作用,所以我猜想需要更神奇而不是神秘的IN声明。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,这可行:

SELECT username, id FROM `user` WHERE id IN (SELECT author_id FROM `post` WHERE id=$MYID)

答案 1 :(得分:0)

问题是postpostsuserusers的对比?

SELECT username, id
FROM `users`
WHERE id IN (SELECT author_id FROM `posts` WHERE author=$MYID);

更重要的是,早期版本的MySQL(高达5.6.x)在优化in查询方面表现不佳。您可以将其重写为:

SELECT username, id
FROM `users` u
WHERE exists (SELECT 1 FROM `posts` p WHERE author=$MYID and p.author_id = u.id)