Как искать список комбинаций двух столбцов в таблице? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть список комбинаций из таблицы (First_Name и Start month занятости).

Мне нужно иметь возможность искать в таблице и определять, каких записей в таблице нет в списке.Ex.(Марк, январь существует, но Марк, март не существует.)

Есть ли более короткий способ сделать это, чем добавить каждую комбинацию в SQL?Это довольно длинный список из довольно большой таблицы.

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Вы можете CROSS JOIN имена сотрудников со списком месяцев, чтобы создать все возможные комбинации.LEFT JOIN для отдыха:

SELECT
FROM (
    SELECT DISTINCT First_Name FROM t
) AS emp
CROSS JOIN (VALUES
    ('January'), ('February'), ('March'), ('April'), ('May'), ('June'),
    ('July'), ('August'), ('September'), ('October'), ('November'), ('December')
) mon(Month_Name)
LEFT JOIN t ON emp.First_Name = t.First_Name AND mon.Month_Name = t.Month_Name
WHERE t.PK IS NULL
0 голосов
/ 12 апреля 2019

Для этого вам нужно left join или not exists. Например:

select v.*
from (values ('Mark', 'January'), ('Mark', 'March')) v(name, mon)
where not exists (select 1
                  from t
                  where t.name = v.name and t.mon = v.mon
                 );
0 голосов
/ 12 апреля 2019

Использовать объединения во временную таблицу или эквивалентные выражения. Что-то вроде

SELECT t.*
  FROM (       SELECT 'Mike' AS name, 'March' AS month
        UNION  SELECT 'John' AS name, 'April' AS month) AS aux
  JOIN table t ON t.name = aux.name 
              AND t.month = aux.name

Конечно, это может быть буквальная временная или стандартная таблица, если у вас уже есть данные.

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