2014-11-04 4 views
0

Можно ли иметь левое соединение, которое дало бы результат, как в следующем предположении:Complicated (мой) SQL покинул присоединиться

Таблица A:

id value 
1 foo 
2 bar 
3 foobar 

ТАБЛИЦА B:

foreign foreign_value 
1   fish 
1   soup 

Результатом соединения должен быть каждый результат таблицы A (левое соединение), а также объединенные результаты между A и B:

SELECT * FROM Сложный присоединиться к B ON A.id = B.foreign:

id value foreign foreign_value 
1 foo  NULL  NULL 
1 foo  1   fish 
1 foo  1   soup 
2 bar  NULL  NULL 
3 foobar NULL  NULL 

При выполнении нормальной LEFT JOIN первая строка в показанном примере-результирующем не будет существовать.

Возможна ли такая выбор?

+0

Что вы имеете в виду 'external join'. – Sebas

+1

Я не уверен, чего вы пытаетесь достичь. Это не объединение, поскольку оно включает в себя несуществующие значения из других источников. (null-null для foreign/value в случае id = 1, например). Зная больше об этом, это поможет. – Sebas

+0

Вся история, вероятно, связана с плохим дизайном базы данных/таблиц, результатом которого является добавление дополнительной функции. В CMS мы показываем записи «Новости», которым назначена какая-то страница (простое поле «pid»). Новая функция позволяет показывать новости на нескольких страницах. Для этого я добавил таблицу M-M, содержащую ссылки на новости <-->. Теперь мне нужно совместить старый запрос типа «pid» с новым запросом MM, и все это сводится к этому вопросу. – kraftb

ответ

1

Нет, такое соединение невозможно, потому что вы не получите первую строку.

Вы можете использовать союз как

SELECT a.id, a.value, b.foreign, b.foreign_value 
FROM A inner join B ON A.id=B.foreign 
    UNION 
SELECT a.id, a.value, null, null 
FROM A 

Это даст ожидаемый результат в вашем примере, но я не понимаю, почему вы пытаетесь это сделать. Поэтому я не знаю, дает ли это ожидаемый результат в общем случае.

Смежные вопросы