Выборка из двух таблиц microsoft sql 2008?

Есть две таблицы:
USERS (id, email) таблица пользователей с эл.почтой
USER_SERVICE_PAYMENT (id, user_service_id) таблица c указанием даты доступа к тому или иному разделу на сайте

Нужно выбрать из таблицы USER_SERVICE_PAYMENT пользователей с доступом к разделу 1 со сроком доступа от 01.05.2014 до 31.12.2100 при этом увидеть эл.почты данных пользователей.

select * from USER_SERVICE_PAYMENT 
where USER_SERVICE_ID = '1' and paid_until between '2014-05-01' and '2100-12-31'


получаю список, но никак не могу разобраться с INNER JOIN.

SELECT *
FROM USER_SERVICE_PAYMENT as A
INNER JOIN USERS as B ON (A.USER_SERVICE_ID = B.EMAIL)
WHERE A.USER_SERVICE_ID = '1' and paid_until between '2014-05-01' and '2100-12-31' and EMAIL = 'NULL'


не работает.
  • Вопрос задан
  • 3395 просмотров
Решения вопроса 1
Если USER_SERVICE_ID - юзерайди (тот же, что и id в USERS), тогда как-то так:
SELECT *
    FROM USER_SERVICE_PAYMENT as A
        INNER JOIN USERS as B ON (A.USER_SERVICE_ID = B.ID)
    WHERE A.USER_SERVICE_ID = '1' and paid_until between '2014-05-01' and '2100-12-31'


Зачем там «EMAIL = 'NULL'» — не понял. С ним же не выберет пользователей, у которых указан ящик.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
я не спец по мскл но помоему ты джойниш id c емейлом, так нельзя. джойнить нужно по тому столбцу по которому эти таблицы определяют юзера, вроде юзер_ид в одно таблице = 5, во второй таблице берется такойже айди приджойнится к результирующей выборке
Ответ написан
Комментировать
@modnews Автор вопроса
SELECT *
    FROM USER_SERVICE_PAYMENT as A
        INNER JOIN USERS as B ON (A.USER_SERVICE_ID = B.USER_ID)
    WHERE A.USER_SERVICE_ID = '1' and A.paid_until between '2014-05-01' and '2100-12-31'


вот так запрос проходит, но все значения пустые.
Ответ написан
Комментировать
lizanin
@lizanin
INNER JOIN USERS as B ON (A.USER_SERVICE_ID = B.USER_ID)


У вас JOIN по ID юзера и ID раздела, это не верно

Как-то так должно быть по идее
SELECT *
    FROM USER_SERVICE_PAYMENT as A
        INNER JOIN USERS as B ON (A.ID = B.USER_ID)
    WHERE A.USER_SERVICE_ID = '1' and A.paid_until between '2014-05-01' and '2100-12-31'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы