ВЫБРАТЬ из набора результатов с помощью IN - PullRequest
1 голос
/ 25 февраля 2012

Я ищу создание хранимой процедуры или приличного оператора SQL для запроса ОТ набора результатов.

Итак, я ищу в одной таблице номера room_numbers, связанные с пользователем BOB

SELECT room_number FROM room_user WHERE user = BOB;

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

Array
(
   Array(
      [room_number] = 10
   )
   Array(
      [room_number] = 13
   )

)

Я мог бы взять эти восстановленные данные, сжать их встроку, а затем сделайте второй запрос:

SELECT title FROM rooms WHERE room_number IN('$roomString');

Но я уверен, что есть гораздо более прямой метод, поскольку я уже в своей базе данных.

Кто-нибудь знает оудобная процедура или заявление, чтобы сделать это?

Ответы [ 5 ]

1 голос
/ 25 февраля 2012

Это просто ПРИСОЕДИНЕНИЕ.

SELECT rooms.title, rooms.room_number FROM rooms
JOIN room_user ON
    room_user.user = "BOB" AND
    room_user.room_number = rooms.room_number
0 голосов
/ 25 февраля 2012

На этом этапе вы можете использовать подзапрос следующим образом

SELECT title FROM rooms WHERE room_number IN(
     SELECT room_number FROM room_user WHERE user = BOB
);

Но для этого подзапроса может потребоваться больше ресурсов, чем для двух отдельных запросов.

0 голосов
/ 25 февраля 2012

Вы можете использовать первый запрос как подзапрос:

SELECT title FROM rooms WHERE room_number IN
(SELECT room_number FROM room_user WHERE user = "BOB");

Но это решение работает крайне плохо (гораздо быстрее implode использовать PHP).

Другой пользователь SO только что опубликовал решение с использованием JOIN, и оно, вероятно, лучшее.

0 голосов
/ 25 февраля 2012

Посмотрите на ваш выбор.

SELECT title FROM rooms WHERE room_number IN
(SELECT room_number FROM room_user WHERE user = BOB)
0 голосов
/ 25 февраля 2012

Один из способов - использовать IN() подзапрос:

SELECT title FROM rooms WHERE room_number IN (
    SELECT room_number FROM room_user WHERE user = 'BOB'
);

Другой использует JOIN:

SELECT
  title
FROM 
  rooms JOIN room_user ON rooms.room_number = room_user.room_number
WHERE room_user.user = 'BOB';

Для их проверки обязательно, но я подозреваю, что *Версия 1009 * будет немного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...