Я соединяю две таблицы на трех полях. Проблема, с которой я столкнулась, заключается в том, что мне нужно использовать строку по умолчанию из таблицы b, если a.baz не находится в b.baz. Проблема в том, что некоторые из них будут иметь совпадение в b, но также имеют значение по умолчанию, и это вызывает перекрестный продукт, который я не хочу.Соедините значения по умолчанию, но не желая перекрестного продукта
select a.foo, a.bar, a.baz, b.fee, b.fie
from a
join b
on a.foo = b.foo
and a.bar = b.bar
and ((a.baz = b.baz) or b.baz = 'DEFAULT')
Токовый выход:
foo bar baz fee fie
bob doe NYC 500 200
bob doe DEFUALT 100 100
john doe DEFAULT 100 100
jane doe NYC 500 500
желаемый результат:
foo bar baz fee fie
bob doe NYC 500 200
john doe DEFAULT 100 100
jane doe NYC 500 500
Образец данных:
a: foo bar baz bob doe NYC john doe NYC jane doe NYC
b: foo bar baz fee fie bob doe NYC 500 200 bob doe DEFAULT 100 100 john doe CHI 300 200 john doe DEFAULT 100 100 jane doe NYC 500 100
Вы можете показать некоторые данные образца из таблиц? –
Добавлены некоторые примеры данных. – SparkeyG
результат, который вы получаете, не является перекрестным продуктом. Я думаю, ваш текущий выход правильный, с учетом условий. –