0

bus_stops以下のようなバス停のあるバスのルート ID を含むテーブルがあります。

 sl_no     route_id                    stop_name
-------------------------------------------------------------
  1          1234                       stop1
  2          1234                       stop2
  3          1235                       stop7
  4          1235                       stop8
  5          5678                       stop1
  6          5678                       stop2

stop1 と stop2 の両方を含む route_id が必要です (stop1 を From 駅として、stop2 を To 駅として、1234 を取得したいのですが、"stop2 を From Station として" および "stop1 を To Station として" は取得したくありません)。

私はこのクエリを書きました:

SELECT DISTINCT route_id FROM bus_stops AS myAlias
WHERE EXISTS ( SELECT * FROM bus_stops WHERE route_id = myAlias.route_id AND stops = 'stop1' )
  AND EXISTS ( SELECT * FROM bus_stops WHERE route_id = myAlias.route_id AND stops = 'stop2' )

ただし、「stop1 を From 駅、stop2 を To 駅」、「stop2 を From 駅、stop1 を To 駅」の route_id を返します。

4

2 に答える 2

0

私があなたの要件を正しく理解していれば、これを試すことができます:

SELECT
    route_id
FROM 
    bus_stops
WHERE
    stop_name IN ('stop1','stop2')
GROUP BY
    route_id
HAVING 
    COUNT(*) = 2

更新:そして、あなたが望む順序で行き来する:

SELECT
    tmp.route_id,
    GROUP_CONCAT(IF(tmp.smin = bs.sl_no AND bs.stop_name = 'stop1','from stop1','') SEPARATOR '') as bfrom,
    GROUP_CONCAT(IF(tmp.smax = bs.sl_no AND bs.stop_name = 'stop2','to stop2','') SEPARATOR '') as bto
FROM (
    SELECT
        route_id,
        MIN(sl_no) as smin,
        MAX(sl_no) as smax
    FROM 
        bus_stops
    WHERE
        stop_name IN ('stop1','stop2')
    GROUP BY
        route_id
    HAVING 
        COUNT(*) = 2
) as tmp
INNER JOIN bus_stops bs
    ON bs.route_id = tmp.route_id
GROUP BY
    tmp.route_id
HAVING
    bfrom <> ''
    AND bto <> ''
于 2013-06-20T07:56:39.253 に答える