【发布时间】: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 不可用。我通过将整个有问题的块放在存储函数中来解决它。