首页 > 解决方案 > 使用 IN 子句从两个表中获取数据

问题描述

我想得到什么?

获取向我发送friend_requests 的人的ID、姓名、电子邮件。我用过的两张表,我想以此为基础获取详细信息

注册-> id,name,email,firmname 和其他几列。

Friends_requests -> id,userId,sentRequests,receivedRequests,friends,dates

请参考以下两张图片。

好友请求表

在此处输入图像描述

报名表

在此处输入图像描述

我在尝试什么?

SELECT * FROM signup WHERE signup.id IN 
(SELECT sentRequests FROM friends_request  WHERE friends_request.userId=46)

这个查询只给出一条记录,而如果我使用下面的查询它给出 3 条记录

SELECT * FROM signup WHERE signup.id IN (47,48,49)

我知道为什么第二个查询由于 IN 子句和三个 id 而给出三个记录

但是这个查询也会给出相同的结果,即 47,48,49

SELECT sentRequests FROM friends_request  WHERE friends_request.userId=46

但是为什么第一个查询没有给出三条记录呢?

当两个值相同时?那为什么结果不一样呢?

标签: mysqlsql

解决方案


关于表friends_requests。列 sentRequests 违反1NF
如果我是对的,IN 运算符将您的信息作为完整字符串获取,而不是作为单独的 ID 信息。

SELECT * 
FROM signup 
WHERE signup.id IN ('47,48,49')
what is operator thinks IN ('47,48,49')
what You think IN (47,48,49)

您必须将列值 '47,48,49' 拆分为返回行,以便操作员可以理解,如果您想使用 IN 操作员...


推荐阅读