Помоги составить запрос MySQL
От: makdak  
Дата: 23.06.13 10:32
Оценка:
Всем привет.
Подскажите как сделать такой:
Есть две таблицы.
В первой таблице одно уникальное поле "user"
Во-второй таблице два поля "user" и "pass". Оба поля не уникальны.

Нужно из первой таблицы, сделать выборку, если во второй таблице, нет пары к примеру "table_1.user=table_2.user" и "12345" в одной строке.

вот так почти работает, но если таблица 2 пустая, не возращает никакие данные, а надо.

    SELECT table_1.user
    FROM table_1, table_2
    WHERE table_1.user = table_2.user
        AND table_2.user != '12345'
    LIMIT 1
Re: Помоги составить запрос MySQL
От: Olaf Россия  
Дата: 23.06.13 12:31
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>вот так почти работает, но если таблица 2 пустая, не возращает никакие данные, а надо.


В таком случае использовать left join...
SELECT table_1.user
FROM table_1
LEFT JOIN table_2 on table_1.user = table_2.user
WHERE table_2.user != '12345'
LIMIT 1
Re[2]: Помоги составить запрос MySQL
От: makdak  
Дата: 23.06.13 13:14
Оценка:
Здравствуйте, Olaf, Вы писали:

O>В таком случае использовать left join...

O>
O>SELECT table_1.user
O>FROM table_1
O>LEFT JOIN table_2 on table_1.user = table_2.user
O>WHERE table_2.user != '12345'
O>LIMIT 1
O>


я уже пробовал. не работает. Если таблица 2 вообще пуста то, такой запрос не возвращает результаты.
Нужно чтобы если во-второй таблице, уже есть юзер с таким паролем, то смотрим следующего юзера..
Re[3]: Помоги составить запрос MySQL
От: Olaf Россия  
Дата: 23.06.13 14:29
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>я уже пробовал. не работает. Если таблица 2 вообще пуста то, такой запрос не возвращает результаты.

M> Нужно чтобы если во-второй таблице, уже есть юзер с таким паролем, то смотрим следующего юзера..

С учетом того, что в table_2 может не быть записей (связанных или вообще), конечно же нужно вставить проверку на is null, я упустил это. Кстати, там наверно должен быть не table_2.user != '12345', а table_2.pass != '12345'

select table_1.user
from
(
    select 1 as user
) table_1
left join 
(
    select 2 as user, '12345' as pass union all 
    select 3, '12'
) table2 on table_1.user = table2.user
where table2.pass != '12345' 
      or table2.user is null
limit 1
Re[4]: Помоги составить запрос MySQL
От: makdak  
Дата: 24.06.13 04:57
Оценка:
Здравствуйте, Olaf, Вы писали:


O>Кстати, там наверно должен быть не table_2.user != '12345', а table_2.pass != '12345'

Да. это я уже намудрил в первом сообщении, каюсь

SELECT table_1.user
FROM (
    SELECT 1 AS user
)table_1
LEFT JOIN (
    SELECT 2 AS user, '12345' AS pass
    UNION ALL 
    SELECT 3 , '12'
)table_2 ON table_1.user = table_2.user
WHERE table_2.pass != '12345'
    OR table_2.user IS NULL 
LIMIT 10


Такой запрос всегда почему-то возвращает одну строку со значением "1".
Re[5]: Помоги составить запрос MySQL
От: Olaf Россия  
Дата: 24.06.13 04:58
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>Да. это я уже намудрил в первом сообщении, каюсь


M>Такой запрос всегда почему-то возвращает одну строку со значением "1".


Все верно, одна ведь запись в table_1, у которой нет соответствия в table_2 Давайте, тогда на конкретных данных, что имеем и что должно быть на выходе.
Re[6]: Помоги составить запрос MySQL
От: makdak  
Дата: 24.06.13 05:35
Оценка:
В table_1 такие строки:
------
user
------
User1
User2
User3

В таблице table_2 такие записи:
-------------
user | pass
-------------
User1 | 12345
User1 | 23456
User2 | 34567
User2 | 45678


нужно из таблицы table_1 выбрать "юзеров", которых с "паролем" 12345 нет в таблице table_2
нужно чтобы был такой вывод:

User2
User3
Re[7]: Помоги составить запрос MySQL
От: Olaf Россия  
Дата: 24.06.13 06:21
Оценка: 3 (1)
Здравствуйте, makdak, Вы писали:

M>В table_1 такие строки:

M>В таблице table_2 такие записи:
M> ...
M> нужно из таблицы table_1 выбрать "юзеров", которых с "паролем" 12345 нет в таблице table_2
M> нужно чтобы был такой вывод:

M> User2

M> User3

Получилось такое решение...
select table_1.user
from table_1
where table_1.user not in 
(
    select user
    from table_2 
    where table_2.Pass = '12345'
)
Re[8]: Помоги составить запрос MySQL
От: makdak  
Дата: 24.06.13 08:18
Оценка:
Здравствуйте, Olaf, Вы писали:

O>Получилось такое решение...

O>
O>select table_1.user
O>from table_1
O>where table_1.user not in 
O>(
O>    select user
O>    from table_2 
O>    where table_2.Pass = '12345'
O>)
O>


то что нужно.. спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.