У меня есть две таблицы, A и B. B является случайным подмножеством A, но с некоторыми значениями, которые переопределяют значения по умолчанию в A. Как мне соединить две таблицы, чтобы объединить их значения?
A
1, 0
2, 0
3, 0
4, 0
B
2, 10
3, 11
Выход
1, 0
2, 10
3, 11
4, 0
Вот мой фактический запрос - я думал, что смогу сделать это с помощью LEFT OUTER JOIN, но это ограничивает выходной набор пересечением строк A и B. Мне нужно, чтобы все строки A возвращались, объединенные с соответствующими строками B.
SELECT A.factor, A.categorical_value, coalesce(A.positive, B.positive), coalesce(A.negative, B.negative)
FROM features A
LEFT OUTER JOIN profiles B ON (A.factor=B.factor AND A.categorical_value=B.categorical_value)
WHERE B.uuid='9e5083da74305628336631da9d2903e3'
Как отмечает ниже Крейг Рингер, я непреднамеренно ограничиваю A пунктом B. Но тогда как мне это сделать? Таблица A — это таблица атрибутов профиля «многие ко многим», где uuid указывает идентификатор пользователя. Таблица B представляет собой основной список всех возможных атрибутов профиля. Я хочу, чтобы запрос возвращал основной список с наложенным на него индивидуальным профилем.
a LEFT OUTER JOIN b
, затемcoalesce
. - person Craig Ringer   schedule 27.03.2014uuid
? - person a_horse_with_no_name   schedule 27.03.2014where
дляB.uuid
, которое никогда не может быть истинным, если дляB
нет ненулевого значения; таким образом, вы фактически превратили свойleft outer join
вinner join
. - person Craig Ringer   schedule 27.03.2014