2010-02-27 1 views
3

У меня есть вопрос о создании подходящего подзапроса для этой проблемыСоздание подзапроса с использованием IN

Предположим, у нас есть пользователи таблицы и ссылки.

users 
+++++++++ 
id name 
1 name1 
2 name2 
3 name3 
+++++++++ 

links 
+++++++++ 
id link 
1 link1 
2 link1 
3 link1 
+++++++++ 

И позволяет сказать, что у меня есть таблица отношений, как этот

name_links 
++++++++++++ 
uid lid 
1 1,3 
2 1,2,3 
3 2 
++++++++++++ 

Я знаю, что это не самый распространенный метод, чтобы сделать это. Я опубликовал еще несколько вопросов о предложениях по этому методу. Если у вас есть предложения, вот ссылка.

mysql query normal relationship table vs concatenated realtionship table

Но используя эту схему, я не могу получить запрос на работу. Запрос я придумал, состоит в следующем:

SELECT link 
FROM links 
WHERE links.id 
    IN 
    (
     SELECT lid 
     FROM name_links 
     WHERE uid=1 
    ) 

Я делаю это с правильным синтаксисом и цитаты, но я только один ряд, первый ряд. Так, например, используя этот же запрос, я получаю только ссылку1. Мне нужно получить link1 и link3.

Это сводит меня с ума, я действительно могу помочь с этим.

Спасибо!

ответ

2
SELECT link 
FROM name_links 
JOIN links 
ON  FIND_IN_SET(id, lid) 
WHERE uid = 1 

Как я уже говорил в answer to your previous question, FIND_IN_SET является unsargable.

+0

А я вижу, спасибо за два замечательных ответа –

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

  • Нет связанных вопросов^_^