SQL-запрос для выбора записей на основе 2 разных значений в одном поле и условии - PullRequest
0 голосов
/ 18 декабря 2011

Я создал такую ​​таблицу для проекта индийских железных дорог:

CREATE TABLE IF NOT EXISTS `dennis` (
  `trid` varchar(50) NOT NULL,
  `place` varchar(50) NOT NULL,
  `si` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

тогда я вставил строки таким образом:

INSERT INTO `dennis` (`trid`, `place`, `si`) VALUES
('100', 'cochi', '3'),
('300', 'cochi', '1'),
('100', 'mumbai', '1'),
('100', 'bangalore', '2'),
('300', 'bangalore', '2'),
('300', 'mumbai', '3'),
('200', 'hyderabad', '1'),
('400', 'trivandrum', '1'),
('200', 'bangalore', '2'),
('200', 'trivandrum', '3'),
('400', 'bangalore', '2'),
('400', 'hyderabad', '3');

Моя проблема в том, что когда я выбираю начальную станцию ​​как Бангалор и пункт назначения как Мумбаи, я получаю все номера поездов, потому что Бангалор существует для всех поездов, т.е. поезд, но Мумбаи существует только для 100 и 300.

Мне нужен запрос, который может вернуть только те триды, у которых есть и Мумбаи, и Бангалор. Также си, то есть серийный номер бангалора должен быть меньше, чем си из Мумбаи.

Я использовал этот запрос, но, похоже, он возвращает все записи

SELECT DISTINCT trid FROM dennis WHERE place ='mumbai' OR place='bangalore'

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

попробуйте это,

SELECT DISTINCT d1.trid 
FROM dennis d1
     INNER JOIN dennis d2 ON d2.trid=d1.trid
WHERE d1.place = 'bangalore' and d2.place = 'mumbai' AND d1.si < d2.si

надеюсь, что это отвечает на ваш вопрос

1 голос
/ 18 декабря 2011
SELECT d1.trid 
FROM dennis d1
INNER JOIN dennis d2 ON d2.trid=d1.trid
WHERE d1.place = 'bangalore' and d2.place = 'mumbai'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...