Всем привет.
Подскажите как сделать такой:
Есть две таблицы.
В первой таблице одно уникальное поле "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
я уже пробовал. не работает. Если таблица 2 вообще пуста то, такой запрос не возвращает результаты.
Нужно чтобы если во-второй таблице, уже есть юзер с таким паролем, то смотрим следующего юзера..
Здравствуйте, 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
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".
Здравствуйте, makdak, Вы писали:
M>Да. это я уже намудрил в первом сообщении, каюсь
M>Такой запрос всегда почему-то возвращает одну строку со значением "1".
Все верно, одна ведь запись в table_1, у которой нет соответствия в table_2 Давайте, тогда на конкретных данных, что имеем и что должно быть на выходе.
Здравствуйте, 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'
)