У меня есть вопрос по этому вопросу;)
Что произойдет, если таблицы будет выглядеть следующим образом? (Только небольшие изменения)
type count
NULL 117
3 333
2 1
type count
NULL 807
1 3
2 32
Потому что в этом случае обе таблицы содержат записи, которые не соответствуют другой таблицы, так что, возможно, присоединение с одного направления не хватает и вам нужно соединить таблицы с обеих сторон, но то, возможно, возникли проблемы с использованием данных для «типа» только с одной таблицы ...
Так одно решение может быть что-то вроде:
select if (t1.type is null, t2.type, t1.type) as type, t1.count count1, t2.count count2
from t1
left join t2
on t1.type=t2.type or (t1.type is NULL and t2.type is NULL)
union
select if (t1.type is null, t2.type, t1.type) as type, t1.count count1, t2.count count2
from t1
right join t2
on t1.type=t2.type or (t1.type is NULL and t2.type is NULL);
Кроме того,
- вы также можете использовать функцию
coalesce()
вместо if (.. is null, ...)
, например. coalesce(t1.type, t2.type)
- вам, возможно, нужно быть осторожным с
union
, возможно, вы хотите сохранить дублированные записи (если есть) и использовать union all
http://www.sqlfiddle.com/#!2/302e69/2
И если 't1' имеет' type' это не в 't2'? – Madbreaks
@Madbreaks. , , Это не похоже на этот конкретный вопрос. Если вы хотите задать такой вопрос, я предлагаю вам сделать это как вопрос, а не в комментарии. –
Основываясь на характере вопроса о op, я считаю, что полный ответ разрешил бы такой сценарий. – Madbreaks