Запрос MySQL: с участием 2 таблиц

#mysql #sql

#mysql #sql

Вопрос:

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

 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 ")));"
  

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

Усилия приветствуются … Большое спасибо

Ответ №1:

Вам нужно заключить в одинарные кавычки 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. но given_id — это int … так что все должно работать правильно … также это может привести к ошибке, что имя столбца не найдено правильно?

2. @koool, пожалуйста, не голосуйте за людей for effort , голосуйте только за людей, если ответ действительно правильный.

Ответ №2:

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

 "SELECT `table1`.* FROM (`table1`) 
    LEFT OUTER JOIN `table2` ON 
        `table1`.`id` = `table2`.`id1`
    WHERE `table2`.`id2` =
    "   given_id;
  

Ответ №3:

Вы можете сузить свои результаты, ограничив условия для объединения. Поскольку вам нужно будет объединить ваш 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. you cannot do nested queries in the where statement in SQL Это нонсенс, вы можете выполнять вложенные выборки практически в любом месте, если каждый подвыбор (которого нет в IN предложении) имеет свой собственный псевдоним.

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

Ответ №4:

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

 SELECT * FROM table1 t1, table2 t2, WHERE t1.id = t2.id2
  

Комментарии:

1. Привет, извините, у меня было две опечатки в моем предыдущем вопросе, не могли бы вы взглянуть на отредактированную версию… Большое спасибо 1

2. -1 Для использования неявного синтаксиса соединения. (Сейчас нет голосов). 1989 хочет вернуть свои анти-шаблоны.

3. Была таблица отношений, но он обновил свой вопрос и удалил его. Проверьте историю

4. Ага, запрос неверен, и вы оставили несколько синтаксических ошибок. И это действительно не соответствует ни одной версии вопроса.