MySQL запрос: с участием 2 таблиц - PullRequest
0 голосов
/ 11 октября 2011

У меня есть две таблицы

table 1 : id, name, age, gender.
table 2(friend) : id1,id2. (stored only once i.e only one entry for a unique pair)

Мне нужно написать запрос, который принимает идентификатор, а затем вернуть набор результатов, содержащий строки из таблицы 1, соответствующие всем его / ее другу.

Я пробовал этот запрос

"SELECT * FROM table1 WHERE id IN ("
+ "(SELECT id2 FROM table2 WHERE (id1="+given_id+")) UNION "
+ "(SELECT id1 FROM table2 WHERE (id2="+given_id+")));"

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

Усилия оценены ... Большое спасибо

Ответы [ 4 ]

2 голосов
/ 11 октября 2011

Вам нужно заключить в одинарную кавычку given_id, потому что в противном случае MySQL будет думать, что это имя столбца.
Этот код также будет работать, если given_id - это число.

"SELECT t1.* "
+"FROM table1 t1 "
+"INNER JOIN table2 t2 ON (t1.id = t2.id1 OR t1.id = t2.id2) "
+"WHERE '"+given_id+"' IN (t2.id1, t1.id) "
1 голос
/ 11 октября 2011

Вы можете сузить результаты, ограничив условия объединения.Так как вам придется присоединиться к вашему table2 с более чем одним идентификатором, вам придется присоединиться к нему дважды и присвоить псевдонимы именам таблиц.

Я считаю, что что-то подобное может помочь:

SELECT table1.*
FROM table1
JOIN table2 t2 ON table1.id = t2.id2
  AND t2.id1 = {given_id}
JOIN table2 t3 ON table1.id = t3.id1
  AND t3.id2 = {given_id};
1 голос
/ 11 октября 2011

Пожалуйста, используйте запрос на присоединение:

"SELECT `table1`.* FROM (`table1`) 
    LEFT OUTER JOIN `table2` ON 
        `table1`.`id` = `table2`.`id1`
    WHERE `table2`.`id2` =
    " + given_id;
0 голосов
/ 11 октября 2011

Вы можете сделать что-то похожее на это.

SELECT * FROM table1 t1, table2 t2, WHERE t1.id = t2.id2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...