【问题标题】:MySQL - Error Code 1054 - Unknown column al.article_id in where clauseMySQL - 错误代码 1054 - where 子句中的未知列 al.article_id
【发布时间】:2018-03-28 14:45:50
【问题描述】:

我正在尝试执行以下查询,但无法找出问题所在。它一直在抱怨

where 子句中的未知列 al.article_id

SELECT al.article_id, COUNT(1) 
FROM article_likes al
WHERE al.created_at > '2018-03-25 11:01:00' 
AND al.article_id 
    NOT IN (
        SELECT article_id 
        FROM article_views 
        WHERE user_id = 48 
    )
AND (
    NOT EXISTS (
        SELECT 1
        FROM article_ignored AS ai 
        WHERE ai.user_id = 48 
        AND ai.article_id = al.article_id
    )
    OR 
    (
        EXISTS 
        (
        SELECT 1 
        FROM article_ignored aii 
        WHERE aii.user_id = 48 
        AND aii.article_id = al.article_id
        AND created_at > '2018-03-26 11:01:00'
        )
        AND
        EXISTS
        (
            SELECT (
                IF(al.post_type = 'article',
                (
                    SELECT DISTINCT (a.tag_id) 
                    FROM 
                    (SELECT tag_id FROM article_tags WHERE article_id = al.article_id) a
                    JOIN 
                    (SELECT tag_id FROM user_tags WHERE user_id = 48 AND type = 'interest') b
                    ON a.tag_id = b.tag_id
                ),
                (
                    SELECT DISTINCT (a.tag_id) 
                    FROM 
                    (
                    SELECT tag_id FROM article_tags 
                    WHERE article_id = (SELECT id FROM articles WHERE post_type = 'question' AND aid = al.article_id)
                    ) a
                    JOIN 
                    (SELECT tag_id FROM user_tags WHERE user_id = 48 AND type = 'interest') b
                    ON a.tag_id = b.tag_id
                    )
                )
            )
        )
    )
)
GROUP BY article_id 
ORDER BY COUNT(1) DESC
LIMIT 3

错误在以下部分,但我无法解决它,请有人帮忙。是不是因为嵌套在exists -> select -> if.

EXISTS
        (
            SELECT (
                IF(al.post_type = 'article',
                (
                    SELECT DISTINCT (a.tag_id) 
                    FROM 
                    (SELECT tag_id FROM article_tags WHERE article_id = al.article_id) a
                    JOIN 
                    (SELECT tag_id FROM user_tags WHERE user_id = 48 AND type = 'interest') b
                    ON a.tag_id = b.tag_id
                ),

【问题讨论】:

  • 请描述您的表格列以及您要做什么。
  • 你确定,你知道你在做什么吗? SELECT 子句在 EXISTS 子查询中被忽略。
  • @PaulSpiegel 我只是使用 SELECT 作为包装器,如果我不使用 SELECT 并直接编写 EXISTS IF(al.post_type) ...它会给出语法错误
  • 我自己解决了..这是一种引用问题..由于多重嵌套,al.article_id 不可用。我通过将整个有问题的块放在存储函数中来解决它。

标签: mysql sql


【解决方案1】:

我认为您可以尝试在此处指定特定的列“table.column”:

SELECT tag_id FROM article_tags WHERE article_id = al.article_id)

到:

SELECT tag_id FROM article_tags WHERE table.article_id = al.article_id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2015-09-11
    • 1970-01-01
    • 2023-02-14
    相关资源
    最近更新 更多