Как выбрать, используя результаты другого выбора? - PullRequest
1 голос
/ 31 мая 2009

в SQLite с C # я хочу сделать

SELECT * FROM media WHERE mediaId= for each
  SELECT mediaId FROM fav WHERE userId=1 ORDER BY indx DESC LIMIT 0, 100

Синтаксис явно неверный. Я понятия не имею, как использовать параметр из одного оператора select в другом.

Ответы [ 3 ]

5 голосов
/ 31 мая 2009

Самый прямой перевод вашего неверного синтаксиса:

SELECT * FROM media WHERE mediaId IN
  (SELECT mediaId FROM fav WHERE userId=1)
ORDER BY indx DESC LIMIT 0, 100

Лучший стиль (возможно, более быстрый, но я не измерял:

SELECT media.* FROM media
JOIN fav USING (mediaId)
WHERE fav.userId=1 
ORDER BY media.indx DESC LIMIT 0, 100

Оба из них - стандартный SQL, кстати, и вторая форма, в частности, будет хорошо работать практически при любой реализации реляционной БД.

2 голосов
/ 31 мая 2009

Вам нужно присоединиться к заявлениям:

SELECT * FROM fav 
WHERE fav.userId=1
LEFT JOIN media 
ON media.mediaId=fav.mediaID
ORDER BY indx DESC LIMIT 0, 100
0 голосов
/ 31 мая 2009

Вам нужен оператор соединения SQL. Это будет стандартный T-SQL, совсем не специфичный для SQLite.

Вы бы сделали что-то вроде этого:

ВЫБРАТЬ м. * ИЗ НОСИТЕЛЕЙ, КАК М, ПРИСОЕДИНИТЬСЯ К ФАЙЛАМ m.mediaId = f.mediaID ГДЕ f.userId = 1

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

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