1

我有两张表,一张是给用户的,另一张是 user_interested_in_who 表。

这个想法是,如果一个用户对另一个用户感兴趣,我会将这两个用户的 id 插入到 user_interested_in_who 表中

我的表的架构是:

Users               user_interested_in_who
  id                id
  name              this_user (id from the users table)
                    interested_in_this_user (id from the users table)
                    interested_or_not (1 = yes, 0 = no)

所以我想通过将它们连接在一起来查询我的表,我的查询是这样的:

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users
LEFT JOIN user_interested_in_who
ON user_interested_in_who.this_user = 1 *//1 is the id of the current log in user*
GROUP BY users.id

这个查询的问题是interested_or_not 列都有1。即使interested_or_not 列在记录中有0

我的问题是,如果在 user_interested_in_who 表上找不到记录,我如何查询它以返回 NULL,如果记录为 0,我如何查询它以在 user_interested_or_not 列中返回 0


编辑:

我怎样才能让它返回这种表:

table:
id | name | interested_or_not
1    jess   NULL
2    erika  1
3    jil    0
4    adrian NULL
....
1050 mich   1
4

2 回答 2

2

您需要使用 LEFT OUTER JOIN 但在您的 ON 子句中没有文字值。

这将返回第一个表中的所有条目以及它们在第二个表中的匹配项或 NULL。

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users 
LEFT OUTER JOIN user_interested_in_who 
   ON user_interested_in_who.this_user = users.id 

不需要 GROUP,并且您的示例案例不需要 WHERE(您已经显示了所有值?)。如果您确实想限制为用户 ID,请进行如下修改:

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users 
LEFT OUTER JOIN user_interested_in_who 
   ON user_interested_in_who.this_user = users.id 
WHERE users.id = 1
于 2012-05-02T18:24:46.490 回答
1

JOIN不需要LEFT JOINJOIN将只返回两个表中的记录您还需要一个 where 子句,而不是使用用户的登录 id 来创建连接。

你不需要对任何东西进行分组,这就是为什么你总是得到 1。

这应该做你想要的。

SELECT users.id, users.name, user_interested_in_who.interested_or_not
FROM users
JOIN user_interested_in_who
ON user_interested_in_who.this_user = users.id
WHERE users.id=1;
于 2012-05-02T16:21:09.790 回答