2015-01-07 4 views
-1

У меня есть следующая таблица в моей базе данных, называемой остановкикак написать этот конкретный запрос относительно приложения для остановки автобуса?

Id coll-id busnumber stops 
1 v01  900  abc 
2 v01  900  bcd 
3 v01  14  abc 
4 v01  14  bcd 
5 v01  14  def 

Автобус в основном останавливается на всех упомянутых точках, пользователю предлагается к источнику входного сигнала и назначения. мы должны получить все доступные номера шин автобусов от источника к месту назначения. я не смог этого сделать, мне нужно, чтобы оба значения находились в остановках столбцов для определенного номера шины. Например, если источником является abc и bcd назначения, мне нужно вернуть как 900, так и 14, это это всего лишь пример данных, там будет намного больше автобусов с перекрывающимися маршрутами. Помоги пожалуйста?

ответ

1

Выберите, только строки из двух остановок, которые вы хотите. Группируйте по номеру шины, чтобы получить количество совпадающих остановок на каждую шину. Верните только те, которые соответствуют обеим остановкам. DISTINCT, вероятно, не является действительно необходимым, но гарантирует, что результаты все еще верны, если одна остановка может быть на маршруте для одной шины несколько раз.

Этот подход также будет работать, если вы хотите получить все автобусы, которые останавливаются на 3 или 4 остановки. Просто разверните список остановок и увеличьте число в разделе having.

SELECT 
    busnumber 
FROM 
    stops s 
WHERE 
    s.stops in ('abc', 'bcd') 
GROUP BY 
    busnumber 
HAVING 
    COUNT(DISTINCT s.stops) = 2 
+0

Вы имеете в виду отчетливый номер автобуса? Это дает маршруты с 2 остановками. – Ben

+0

эй, спасибо. Я попробовал что-то подобное. я не мог понять группу по функциям –

+0

Группа должна получить только один результат за шину и позволяет выполнять агрегацию на группу, например, «COUNT», которая следует за ней. – GolezTrol

1

вы можете использовать self join, чтобы получить номер автобуса дал две остановки

SELECT b1.busnumber 
    FROM stops b1 
    JOIN stops b2 
    ON b1.busnumber = b2.busnumber 
    AND b1.stops ='abc' 
    AND b2.stops ='def' 
+0

Это должно сработать. Ницца и просто. – GolezTrol

+0

yup, я думал о себе, но вроде забыл как:/спасибо! –

Смежные вопросы