2015-02-26 4 views
0

Так у меня есть следующий:Выберите строки из таблицы не соответствуют в другой таблице

таблица поиска, которая имеет два столбца и выглядит следующим образом, например:

userid  moduleid 
    4   4 

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

userid 
    1 
    2 
    3 
    4 

В этом примере показано, что пользователь с идентификатором 4 имеет матч с модулем ID 4. Остальные не согласованы с любым moduleid ,

Мне нужен запрос, который получает данные из таблицы users. ГДЕ модульид не 4. В моем приложении я знаю модуль, но я не знаю пользователя. Таким образом, запрос должен возвращать другие идентификаторы пользователя, кроме 4, потому что 4 уже совпадает с идентификатором модуля 4.

Это можно сделать?

+0

Я взял на себя смелость изменить название вашего вопроса, поскольку оно было не очень описательным; Надеюсь, мне удалось отразить ваши намерения, как вы это делали. – jpw

+0

Отлично. Благодарю. –

+0

Возможный дубликат [Mysql: выбор строк из таблицы, которые не находятся в другом] (http://stackoverflow.com/questions/11767565/mysql-select-rows-from-a-table-that-are-not-in -another) –

ответ

0

Я думаю, что правильно понял ваш вопрос. Вы можете использовать подзапрос для перекрестной проверки данных между обеими таблицами с помощью функции NOT IN().

Ниже будут выбраны все userid записи из user_tbl таблицы, которые не существуют в lookup_tbl таблице:

SELECT `userid` 
FROM `user_tbl` 
WHERE `userid` NOT IN (
    SELECT DISTINCT(`userid`) FROM `lookup_tbl` WHERE moduleid = 4 
) 
+0

Это делает. Благодаря! –

+0

Отлично, рад помочь! – BenM

0

Есть несколько способов сделать это, один довольно интуитивный способ (на мой взгляд) является использовать in предикат для исключения пользователей с moduleid 4 в таблице поиска:

SELECT * FROM Users WHERE UserID NOT IN (SELECT UserID FROM Lookup WHERE ModuleID = 4) 

есть другие способы, с возможно более высокой производительностью (с использованием коррелированные не существует запрос или дого n, например).

-3

Вы ищете такой запрос?

выберите идентификатор из yourtablename где moduleid <> 4

0

Еще один вариант заключается в использовании LEFT JOIN, так что вы можете получить значения из обеих таблиц, даже если они не совпадают. Затем выберите строки, в которых нет значения userid из таблицы поиска.

SELECT u.userid 
FROM usersTable u 
    LEFT JOIN lookupTable lt ON u.userid = lt.userid 
WHERE lt.userid IS NULL 
Смежные вопросы