选择子查询的mysql结果将在何处使用?

选择子查询的mysql结果将在何处使用?,mysql,select,subquery,where,Mysql,Select,Subquery,Where,非常简单的问题(对于某些人):是否可以在where子句中使用select子查询结果 我目前使用的是这样的东西: SELECT companies.id , companies.name , (SELECT COUNT(*) FROM orders WHERE orders.company_id = companies.id AND orders.scheduled_at BETWEEN '2012-08-01 00:

非常简单的问题(对于某些人):是否可以在where子句中使用select子查询结果

我目前使用的是这样的东西:

SELECT companies.id
    , companies.name
    , (SELECT COUNT(*)
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) AS number_of_rides
FROM companies
WHERE
    (SELECT COUNT(*)
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) != 0
    AND
    companies.affiliate = 0
    AND
    companies.id = 346
SELECT companies.id
    , companies.name
    , (SELECT COUNT(*) AS number_of_rides
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) AS x
FROM companies
WHERE
    x.number_of_rides != 0
    AND
    companies.affiliate = 0
这使同一查询运行两次,一次在select中,另一次在where中。是否可以在where中引用select子查询,如下所示:

SELECT companies.id
    , companies.name
    , (SELECT COUNT(*)
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) AS number_of_rides
FROM companies
WHERE
    (SELECT COUNT(*)
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) != 0
    AND
    companies.affiliate = 0
    AND
    companies.id = 346
SELECT companies.id
    , companies.name
    , (SELECT COUNT(*) AS number_of_rides
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) AS x
FROM companies
WHERE
    x.number_of_rides != 0
    AND
    companies.affiliate = 0
这在目前不起作用,这也不起作用:

SELECT companies.id
    , companies.name
    , (SELECT COUNT(*)
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) AS number_of_rides
FROM companies
WHERE
    number_of_rides != 0
    AND
    companies.affiliate = 0
不在查询中运行两次是否可能

编辑:好的。虽然在某些情况下使用GROUPBY是不可能的,但它实现了我在本例中需要实现的目标。我就是这么做的:

SELECT companies.id
    , companies.name
    , (SELECT COUNT(*)
    FROM orders
    WHERE
        orders.company_id = companies.id
        AND
        orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
    ) AS number_of_rides
FROM companies
WHERE
    companies.affiliate = 0
GROUP BY companies.id
HAVING number_of_rides != 0
我仍然想知道是否有技术上的解释,说明为什么在SELECT和HAVING can…(选择和拥有can…)中WHERE无法访问子查询结果

Select 
    companies.id  , 
    companies.name,
    Tcount as number_of_rides
FROM companies
left join (
        select 
            id , 
            COUNT(*) as Tcount 
        FROM orders 
        where orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
        ) as orders on orders.company_id = companies.id
WHERE companies.affiliate = 0 AND companies.id = 346
group by companies.id 
having number_of_rides != 0
试试这个

Select 
    companies.id  , 
    companies.name,
    Tcount as number_of_rides
FROM companies
left join (
        select 
            id , 
            COUNT(*) as Tcount 
        FROM orders 
        where orders.scheduled_at BETWEEN '2012-08-01 00:00:00' AND '2012-10-31 23:59:59'
        ) as orders on orders.company_id = companies.id
WHERE companies.affiliate = 0 AND companies.id = 346
group by companies.id 
having number_of_rides != 0

你能发布表结构和示例数据吗?Join可以发布表结构和示例数据。Join可以发布表结构和示例数据。这不起作用,但你提醒过我。虽然使用GROUP BY在所有情况下都不起作用,但它在我的情况下起到了我想要的作用,谢谢……这不起作用,但你提醒我要使用它。虽然使用GROUP BY在所有情况下都不起作用,但它在我的情况下实现了我想要的,谢谢。。。