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


Compare column value with nested 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...

我的情况与post<->略有不同用户情况,因为在我的情况下,我不需要任何关于帖子的信息
因此,根据上面的内容,在我发现的一些随机帖子的帮助下(对于MySql问题,我永远不知道在谷歌上搜索什么),我认为我的查询应该是这样的:

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

这不起作用,所以我想需要比神秘的IN语句更神奇的东西。

问题是postposts还是userusers

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)

如果我理解正确,这可能会起作用:

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