MySql Присоединиться к таблице просмотра как логическое значение - PullRequest
3 голосов
/ 02 июля 2010

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

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

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

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

Ответы [ 4 ]

10 голосов
/ 02 июля 2010
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
3 голосов
/ 02 июля 2010
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 ...;
1 голос
/ 02 июля 2010

Я бы сделал 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
0 голосов
/ 21 июня 2017

Я знаю, что это «старый» вопрос, но только что случился, и ни один из этих ответов не казался настолько хорошим.Поэтому я решил добавить 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, которая возвращаетпервое ненулевое значение слева направо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...