выбрать по результатам выбора - PullRequest
9 голосов
/ 24 января 2011

У меня есть таблица базы данных, которая записывает движения пользователей в игре.Каждый раз, когда они перемещаются, я записываю их идентификатор пользователя, move_index (увеличивает каждую строку) и идентификатор зоны, в которой они находятся. У меня есть специальное значение move_index -1, чтобы указать последнее перемещение этого пользователя.

id   user_id  move_index  zone_id   
----------------------------------------------------------------
0    11        0          0  
1    11        1          0 
2    11        2          0   
3    11       -1          3    

4    22        0          0   
5    22        1          1   
6    22        2          1    
7    22       -1          3    

Я хочу сделать две вещи с помощью sql:

  • Определить всех пользователей, которые начали и закончили в определенных зонах (например, начали в зоне 0 и закончили в зоне 3)
  • Расширяя вышесказанное, выявляйте всех пользователей, которые начинали и заканчивали в определенных зонах и проходили через определенную зону.

Я знаю, как это сделать с помощью нескольких операторов SQL и Java - но я не знаюКак сделать это в одном выражении SQL.Нужно ли делать выбор, а затем выбрать результаты этого выбора?

Ответы [ 3 ]

10 голосов
/ 24 января 2011

Вы можете просто выполнить SUBQUERY , чтобы добиться этого в рамках "одного" запроса.

например: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

По сути, вы используете результаты «внутреннего» SELECT в качестве рабочего набора данных для «внешнего» SELECT.

0 голосов
/ 24 января 2011

здесь идет ваш запрос:

SELECT *, (foo = true AND bar = true) as foobar
FROM foo
WHERE (id = 3)

Вы можете использовать значение foobar в результате запроса, чтобы определить результат второго уравнения.подсказка о том, как это сделать.

0 голосов
/ 24 января 2011
select distinct user_id from table where (move_index=0 and zone_id=0) and (move_index=-1 and zone_id=3)
...