具有内部联接的子查询

时间:2018-11-06 15:01:22

标签: mysql pdo

我陷入了子查询问题,试图在使用联接时获取多个列。

对于试图跟踪网站不同部分的通知系统,我试图根据“类型”字段的设置从其他表中获取不同的字段。

我希望我可以做这样的事情:

SELECT
    n.`id`,
    n.`last_date`,
    IF(n.type = 'liked', (SELECT co.`article_id`, a.article_id FROM `articles_comments` co INNER JOIN `articles` a ON a.article_id = co.article_id WHERE co.`comment_id` = n.data_id), NULL),
    n.`comment_id`,
            n.`type`,
            n.`data_id`,
            FROM
                `user_notifications` n
            WHERE n.`owner_id` = 8505

问题是phpmyadmin给我一个错误“#1241-操作数应包含1列”

我很困惑,因为如果我不进行INNER JOIN,而只抓住“ article_id”,则效果很好。

1 个答案:

答案 0 :(得分:0)

子查询只能返回一列

您可以看到this link

此查询

(SELECT  a.article_id 
FROM `article
s_comments` co 
INNER JOIN `articles` a 
ON a.article_id = co.article_id 
WHERE co.`comment_id` = n.data_id)

必须是这样的

(SELECT  a.article_id 
FROM `article
s_comments` co 
INNER JOIN `articles` a 
ON a.article_id = co.article_id 
WHERE co.`comment_id` = n.data_id)
UNION ALL
(SELECT co.`article_id`
FROM `article
s_comments` co 
INNER JOIN `articles` a 
ON a.article_id = co.article_id 
WHERE co.`comment_id` = n.data_id)