mysql列“id”不明确

qojgxg4l  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(362)

我试图做一个搜索功能,涉及三个表。
搜索用户并返回用户id 1 是返回用户的朋友。此外,还将从第三个表中筛选返回的用户,该表将检查该用户的标记。
所以我可以说,“返回有标签的用户 'Programming', 'Php'userinterests table 如果返回的用户是 usr id 1 “是否”
我试着使用下面的查询,但是 Column 'id' in IN/ALL/ANY subquery is ambiguous 如果我删除左连接,那么它的工作。

SELECT n.id, n.firstName, n.lastName, t.id, t.tag, t.user_id, if(id in (
        SELECT u.id as id from friends f, users u 
        WHERE CASE 
        WHEN f.following_id=1
        THEN f.follower_id = u.id 
        WHEN f.follower_id=1
        THEN f.following_id = u.id
        END 
        AND
        f.status= 2
    ), "Yes", "No") as isFriend 
FROM users n
LEFT JOIN userinterests t on  n.id = t.id

WHERE t.tag in ('Programming', 'Php')

感谢您抽出时间:)

6ju8rftf

6ju8rftf1#

限定所有列名。您似乎知道这一点,因为所有其他列名都是限定的。
我不确定您的逻辑是否正确,但您可以通过限定列名来修复错误:

SELECT . . . 
       (CASE WHEN n.id IN (SELECT u.id as id 
                           FROM friends f CROSS JOIN
                                users u 
                           WHERE CASE WHEN f.following_id=1
                                      THEN f.follower_id = u.id 
                                      WHEN f.follower_id=1
                                      THEN f.following_id = u.id
                                 END 
                           ) AND
                 f.status= 2
             THEN 'Yes' ELSE 'No'
        END) as isFriend 
. . .
avkwfej4

avkwfej42#

这就是你的方法:
1) 我曾经 INNER JOIN 而不是 LEFT JOIN 对于与标记无关的跳过用户: Programming 以及 Php .
2) 我将逻辑替换为查找与用户相关的朋友集 id 等于 1 .

SELECT
    n.id,
    n.firstName,
    n.lastName,
    t.id,
    t.tag,
    t.user_id,
    IF(
        n.id IN (SELECT follower_id FROM friends WHERE status = 2 AND following_id = 1
                 UNION
                 SELECT following_id FROM friends WHERE status = 2 AND follower_id = 1),
        "Yes",
        "No"
    ) AS isFriend
FROM
    users n
INNER JOIN
    userinterests t ON n.id = t.id AND t.tag IN ('Programming', 'Php')

只是好奇,这是什么意思 status = 2 ?

相关问题