2010-07-02 2 views
3

У меня есть таблица пользователей и таблицу просмотра в котором перечислены некоторые идентификаторы пользователей ... Они выглядят примерно так:MySql Присоединиться Посмотреть таблицу как логическое

Пользователи:

User_ID | Name  | Age | ... 
    555  John Doe  35 
    556  Jane Doe  24 
    557  John Smith  18 

View_Table

User_ID 
    555 
    557 

Теперь, когда я выполнить запрос для получения пользователя:

ВЫБРАТЬ User_ID, имя, возраст от пользователей, где User_ID = 555

ВЫБРАТЬ User_ID, имя, возраст от пользователей, где User_ID = 556

Я также хотел бы, чтобы выбрать логическое значение, с указанием того, или не пользователь, которого я получаю, присутствует в View_Table.

Результат:

User_ID   Name   Age  In_View 
    555    John Doe  35   1 
    556    Jane Doe  24   0 

Любая помощь будет принята с благодарностью. Эффективность - огромный плюс. Благодаря!!

ответ

10
SELECT Users.User_ID,Name,Age, View_Table.User_ID IS NOT NULL AS In_View 
FROM Users 
LEFT JOIN View_table USING (User_ID) 
WHERE User_ID = 555 
+0

+1 для использования 'IS NOT NULL' вместо' IF() ' –

+0

для этого требуется больше лодок – Thomas

1

Я бы сделал LEFT JOIN. До тех пор, пока у вас есть ключ/индекс для User_ID, он должен быть очень эффективным.

SELECT User_ID,Name,Age, IF(View_Table.User_ID, 1, 0) AS In_View 
FROM Users LEFT JOIN View_Table USING(User_ID) 
WHERE User_ID = 555 
3
SELECT 
    User_ID, Name, Age, 
    CASE WHEN v.UserID is not null THEN 1 ELSE 0 END AS In_View 
FROM Users u 
LEFT JOIN View_Table v on u.User_ID = v.UserID 
WHERE UserID ...; 
0

Я знаю, что это «Старый» вопрос, но только что произошло на этом и ни один из этих ответов не казалось, что хорошо. Так я думал, что бросить в моих 2 центах

SELECT 
    u.User_ID, 
    u.Name, 
    u.Age, 
    COALESCE((SELECT 1 FROM View_Table AS v WHERE v.User_ID = u.User_ID), 0) AS In_View 
FROM 
    Users AS u 
WHERE 
    u.User_ID = 555 

Просто выберите 1 с корреляцией запросом (или нулем), то, чтобы получить 0 мы можем использовать удобную функцию COALESCE которая возвращает первый ненулевое значение слева правильно.

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