MYSQL-запрос, возвращающий больше значений
Проблема в том, что у меня есть таблицы DATA и SAT, которые имеют 3 поля, каждое из этих полей может содержать значение 991. Ниже приведено неправильное количество столбцов, дающих больше данных. Как получить правильное значение. Пожалуйста посоветуй
DATA
id
insurance1
insurance2
insurance3
SAT
id
insurance1
insurance2
insurance3
SELECT * FROM DATA v, SAT s where v.PRIMARY_INSURANCE_ID = '991'
or v.INSURANCE_ID = '991'
or v.INSURANCE_ID = '991'
and s.INSURANCE_ID = '991'
or s.INSURANCE_ID = '991'
or s.INSURANCE_ID = '991';
Позвольте мне привести пример Пример 1
DATA
id
insurance1 =991
insurance2 =56
insurance3 =22
SAT
id
insurance1=56
insurance2=23
insurance3=96
When query is executed. The count should be 1
Пример 2
DATA
id
insurance1 =991
insurance2 =56
insurance3 =22
SAT
id
insurance1=991
insurance2=23
insurance3=96
When query is executed. The count should be 2
Пример 3
DATA
id
insurance1 =991
insurance2 =56
insurance3 =991
SAT
id
insurance1=991
insurance2=23
insurance3=96
When query is executed. The count should be 3 or 2
2 ответа
У вас есть две таблицы, и вы хотите сосчитать в них 991. Таким образом, таблицы не обязательно связаны, и объединение не имеет смысла. Просто добавьте две цифры:
select
(select count(*) from data where 991 in (insurance1, insurance2, insurance3))
+
(select count(*) from sat where 991 in (insurance1, insurance2, insurance3));
Кстати: будьте осторожны при смешивании AND и OR:-)
Я бы предложил перефразировать это как join
:
SELECT *
FROM DATA v JOIN
SAT
ON '991' in (v.PRIMARY_INSURANCE_ID, v.INSURANCE_ID) AND
'991' in (s.INSURANCE_ID)
Ваш запрос содержит только три поля. Вы можете продлить in
список, чтобы иметь все столбцы, которые вы хотите. Основываясь на вашей структуре таблицы:
SELECT *
FROM DATA v JOIN
SAT
ON '991' in (v.INSURANCE1, v.INSURANCE2, v.INSURANCE3) AND
'991' in (s.INSURANCE1, s.INSURANCE2, s.INSURANCE3);
РЕДАКТИРОВАТЬ:
Я не думаю, что вы хотите join
совсем:
select count(*), count(distinct id)
from (select id, insurance1 as insurance from data union all
select id, insurance2 from data union all
select id, insurance3 from data union all
select id, insurance1 from sat union all
select id, insurance2 from sat union all
select id, insurance3 from sat
) i
where insurance = '991';
использование count(*)
чтобы получить 3 и count(distinct id)
чтобы получить 2. Примечание: последний предполагает, что id
соответствие между таблицами.