У меня есть база данных с двумя таблицами. table1 и table2.
Таблица 1 содержит список тестов (столбец " имя "). И я хочу подсчитать, сколько строк отсутствует в таблице2 (эта таблица также имеет имя столбца) в соответствии с перечнем тестов таблицы1. Поэтому я просто хочу подсчитать несоответствие между table1.name и table2.name.
Я попробовал несколько запросов, но все они действительно не работали. Я попытался использовать инструкцию " NOT IN ", но это занимает слишком много времени. Как несколько минут.
Например, выход должен быть:
COUNT (*) = 20
Это означает, что 20 тестов отсутствуют (или еще не сделано) в table2.
Я использую MySQL, поэтому я не могу использовать инструкцию EXCEPT или MINUS.
Благодарю вас заранее.
Нордин
Попробуйте выполнить следующий запрос:
select count(case when bname is null then 1 end)
from
(
select a.name as aname, b.name as bname from
table1 a left join table2 b
on a.name=b.name)x
Вы можете использовать его not exists
:
select count(*)
from table1 t1
where not exists (select 1 from table2 t2 where t2.name = t1.name);
Если у вас есть дублирующее name
в table1
тогда вам нужно count(distinct t1.name)
.
MINUS
может использоваться в MySQL. Ссылка: http://www.mysqltutorial.org/mysql-minus/
Попробуй это:
SELECT name
FROM table1
MINUS
SELECT name
FROM table2