2012-01-08 5 views
1

Я хочу знать один запрос MySQL для решения этой проблемы:MySQL Query Выберите, где идентификатор не существует в таблице РЕГИСТРИРУЙТЕСЬ

У меня есть таблица, которая состоит из идентификаторов членов и идентификаторов местоположения ..

 
_________________________________________________________ 
|  |      |      | 
| ID | Member Id    |  Location   | 
|______|________________________|________________________| 
|  |      |      | 
| 1 | 2371    |   7   | 
|  |      |      | 
| 2 | 5123    |   10   | 
|  |      |      | 
| 3 | 2371    |   9   | 
|  |      |      | 
| 4 | 5123    |   9   | 
|  |      |      | 
| 5 |  565    |   9   | 
|  |      |      | 
| 6 | 2371    |   5   | 
|  |      |      | 
| 7 | 5123    |   6   | 
|  |      |      | 
|______|________________________|________________________| 

Другой таблица состоит из всех данных местоположений:

 
__________________________________________________ 
|      |      | 
| Location Id   |  Location Name | 
|________________________|________________________| 
|      |      | 
|  1     |   ABC   | 
|      |      | 
|  2     |   BCD   | 
|      |      | 
|  3     |   CDE   | 
|      |      | 
|  4     |   DEF   | 
|      |      | 
|  5     |   EFG   | 
|      |      | 
|  6     |   GHI   | 
|      |      | 
|  7     |   HIJ   | 
|      |      | 
|  8     |   IJK   | 
|      |      | 
|  9     |   JKL   | 
|________________________|________________________| 

Я хочу найти все идентификаторы местоположения из таблицы, где ID пользователя 2371 нет. Как я могу найти это в одном запросе? Я знаю, что могу это сделать, если разбить запрос на две части. Как и массив всех локаций .. и массив всех мест, где существует идентификатор члена. Затем, используя функцию! In_array от PHP

Спасибо за ваше время и помощь заранее.

+0

С какого стола (имени) вы хотите получить идентификаторы мест? – adatapost

ответ

1

Вы можете найти все места, которые член 2371 находится в выполнив:

SELECT location 
FROM memberlocation 
WHERE memberid = 2371 

Вы можете найти все другие (те, которые вы хотите):

SELECT * 
FROM location 
WHERE locationid NOT IN 
    (SELECT location 
     FROM memberlocation 
     WHERE memberid = 2371) 
+0

Привет Nanne, Когда я пытаюсь запрос ... SELECT * FROM s_location ГДЕ s_location_id НЕ В (ВЫБРАТЬ s_location_id FROM s_location_member WHERE c_member_id = 2371) это дает мне ошибку: «# 1064 - You имеют ошибку в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «IN (SELECT s_location_member.s_location_id FROM s_location_member» в строке 4 » – ppant

+0

Это было из головы, я предположим, что «IS IN IN IN» не является хорошим sql, lemme fix – Nanne

+0

Хорошо. Я думаю, что вы идете легче понять .. – ppant

0

Вы можете использовать следующий запрос с соединением для фильтрации результатов по MemberID:

SELECT l.LocationName FROM MemberLocations AS ml 
INNER JOIN Locations AS l ON ml.Location = l.LocationID 
WHERE ml.MemberID != 2371 
+0

Hi @Damyan Bogoev, Вышеприведенный запрос не работает для меня .. – ppant

+0

В чем проблема? Возвращает ли он ложные результаты? –

+0

Да, он возвращает мне все идентификаторы местоположения – ppant

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