sql子查询,传递一个变量

时间:2012-03-29 21:20:05

标签: sql activerecord subquery

你可以将变量传递给子查询吗?

SELECT users.id AS id, 
(SELECT SUM(total) FROM (image_totals) WHERE `cat_id` IN ('5', '3') AND `user_id` =id) AS image_count

这只是较大查询的一部分,所有这些都是通过Active Record生成的,但关键问题仍然是,' id'变量,我怎么能把它传递给我的子查询?我看这一切都错了吗?

提前致谢。如果您需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题,那么你可以。

如果表中不包含相同的列,则不需要每列的表名。我更喜欢包含表名,因为它更容易理解。

SELECT  users.id AS id ,
        (SELECT SUM(image_totals.total)
         FROM   image_totals
         WHERE  image_totals.cat_id IN ( '5', '3' ) AND 
                image_totals.user_id = users.id) AS image_count
FROM users

您还可以对表使用别名,以使其更容易键入。 u = user,i = image_totals。

SELECT  u.id AS id ,
        (SELECT SUM(i.total)
         FROM   image_totals AS i
         WHERE  i.cat_id IN ( '5', '3' ) AND 
                i.user_id = u.id) AS image_count
FROM users AS u

答案 1 :(得分:1)

不,这是不可能的,必须以不同的方式实施。

选择必须从一个一致的数据集中进行选择。

您的数据集可能包含复杂查询。

答案 2 :(得分:1)

使用GROUP BY。对于cat_id的特定值,您希望每个user.id的SUM(总计)。我不知道你的查询的其余部分是什么样的,但是对于显示的内容,你可以只是:

SELECT
        users.id AS id,
        SUM(total)
FROM image_totals
WHERE cat_id IN ('5', '3')
GROUP BY users.id