Вопрос-вопрос: есть ли лучший способ выбрать все записи из одной таблицы вместе с несопоставленными записями из другой таблицы? - PullRequest
0 голосов
/ 28 августа 2011

Рассмотрим следующее:

**Customers**
CustomerId (PK)
LastName
FirstName
Address1
City
State
Zip

**CustomerMailingAddresses**
CustomerId (PK)/(FK)
Address1
City
State
Zip

По сути, между двумя таблицами существует взаимно-однозначное отношение. Однако не каждая запись о клиенте в Customers имеет запись в таблице CustomerMailingAddresses. Я пытаюсь использовать T-SQL (Sql Server 2008) для генерации списка имен и адресов клиентов. Однако я хочу только вернуть адрес из CustomerMailingAddresses, а также все адреса от клиентов, у которых нет соответствующей записи для каждого CustomerId в CustomerMailingAddresses. Другими словами, запись в CustomerMailingAddresses (если она есть) будет действовать как переопределение для адреса в Customers.

Я ударил стену, так как ни один из запросов, которые я пробовал, не будет работать. Я открыт для любых предложений.

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Один из вариантов - использовать COALESCE

select
    c.CustomerId,
    COALESCE(m.Address1, c.Address1) as Address1,
    COALESCE(m.City, c.City) as City,
    COALESCE(m.State, c.State) as State,
    COALESCE(m.Zip, c.Zip) as Zip
from Customers c
left join CustomerMailingAddresses m on m.CustomerId = c.CustomerId
0 голосов
/ 28 августа 2011

Как насчет

SELECT * FROM Customers
MINUS
SELECT Customers.*
       FROM Customers, CustomerMailingAddresses
       WHERE Customers.CustomerId = CustomerMailingAddresses.CustomerId

(извините, если мой SQL немного ржавый)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...