我有三个表:
Profile
-ProfileID
-FirstName
-LastName
ProfilePhoneNumber
-ProfileID
-PhoneNumberID
PhoneNumber
-PhoneNumberID
-PhoneNumberTypeID
-Number
ProfilePhoneNumber
是 Profile
和 PhoneNumber
之间的简单桥接表。
我想查询特定的电话号码类型并返回一行。我希望能够接受 null
值,因为并非所有人都会拥有所有类型的电话号码。
这是我当前的查询:
SELECT
p.FirstName
, p.LastName
, bpn.Number as BusinessPhoneNumber
, mpn.Number as MobilePhoneNumber
FROM Profile p
LEFT JOIN ProfilePhoneNumber ppn ON p.ProfileID = ppn.ProfileID
LEFT JOIN PhoneNumber bpn ON ppn.PhoneNumberID = bpn.PhoneNumberID AND bpn.PhoneNumberTypeID = '1'
LEFT JOIN PhoneNumber mpn ON ppn.PhoneNumberID = mpn.PhoneNumberID AND mpn.PhoneNumberTypeID = '2'
WHERE p.ProfileID = '123'
这始终有效,但会返回三行,因为配置文件 123 具有三个电话号码,因此查询会为每个电话号码返回一行。
如果我将其更改为 PhoneNumber
上的 INNER JOIN
,我只能返回一行,但仅限于正在查询的配置文件具有所有 PhoneNumberTypeID
我正在查询的类型。
如何返回允许空值的一行?
最佳答案
如果您提供一些数据样本和预期输出,我稍后会更新查询。
到目前为止,这会有帮助吗?
SELECT
p.FirstName
, p.LastName
, Max(bpn.Number) as BusinessPhoneNumber
, Max(mpn.Number) as MobilePhoneNumber
FROM Profile p
LEFT JOIN ProfilePhoneNumber ppn on p.ProfileID = ppn.ProfileID
LEFT JOIN PhoneNumber bpn on ppn.PhoneNumberID
= bpn.PhoneNumberID AND bpn.PhoneNumberTypeID = '1'
LEFT JOIN PhoneNumber mpn on ppn.PhoneNumberID
= mpn.PhoneNumberID AND mpn.PhoneNumberTypeID = '2'
WHERE p.ProfileID = '123'
group by p.FirstName, p.LastName;
关于sql - 将三行(包含空值)的数据合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687388/