修复子查询返回超过1行

时间:2014-04-13 19:26:22

标签: mysql

我知道有很多关于这方面的问题,但我似乎无法找到解决问题的逻辑。这是我的剧本,如果您需要更多信息,请告诉我。

SELECT 
    DISTINCT StationID
from
    station
        JOIN
    cars ON station.StationID = cars.CurrentStationID
WHERE
    station.Capacity = (SELECT 
            Count(cars.CurrentSlotID)
        FROM
             cars Group By CurrentStationID
        );

我想做的是,

我有一个名为Station的表,其容量值为INT。

我有另一个名为cars的表,它有一个StationID外键。

现在我想让所有基于站点数据库容量的站点等于车载数据库中的车辆数量。

3 个答案:

答案 0 :(得分:0)

SELECT s.StationID
from station s
JOIN cars c ON s.StationID = c.CurrentStationID
group by s.stationID, s.Capacity
having count(c.CurrentStationID) = s.Capacity

答案 1 :(得分:0)

我更像是一个SQL Server用户,但这听起来像你需要的那样:

SELECT 
    StationID
from
    station
WHERE
    station.Capacity = (SELECT 
        Count(CurrentSlotID)
    FROM
         cars 
    WHERE cars.CurrentStationID = station.StationID
    );

您需要指明您只想计算cars中与您在主查询中加入的电台具有相同CurrentStationID的记录。而且您在主查询中实际上并不需要cars,因为您不会从中访问任何数据:仅station。因此,您不需要DISTINCT,因为您只需每StationID个值返回一条记录。 (假设StationIDstation的主键。)

答案 2 :(得分:0)

这应该显示每个车站,其容量和车站的车辆数量,只有车站满或超过其容量。 (因此,在HAVING子句中,> =而不是=)

select s.stationid,
       s.capacity,
       count(c.currentstationid) as num_cars_at_station
  from station s
  join cars c
    on s.stationid = c.currentstationid
 group by s.stationid, s.capacity
having count(c.currentstationid) >= s.capacity