【发布时间】:2019-12-04 14:40:43
【问题描述】:
我有一张包含地点列表的表格 - 根据 place_id 字段,每个地点都是唯一的:
place_id name
TEST01 Company1
我还有一个名为 place_address 的表,其中有一个名为 address_id 的索引字段,然后用于存储地址信息(注意该地点有多个地址):
place_id address_type address_id
TEST01 DEFAULT 507
TEST01 REGISTERED_OFFICE 508
地址表实际上保存了地址详细信息:
address_id name address city
507 address1 address1, road1 city1
508 address2 address2,road2 city2
我正在使用 2 个连接查询三个表:
select pl.place_id,
pl.name,
pl.email_address,
pl.phone,
pl.fax,
pl.web_address,
pl.vat_registration,
pl.user_def2 as companyregno,
case when pa.address_type = 'DEFAULT' then ad.address else NULL end as default_address,
case when pa.address_type = 'REGISTERED_OFFICE' then ad.address else NULL end as registered_address,
ad.second_address,
ad.third_address,
ad.fourth_address,
ad.city,
ad.zippost
from place pl
left join place_address pa on pl.place_id = pa.place_id
left join address ad on pa.address_id = ad.address_id
where pl.place_id like '%TEST%'
and pa.address_type in ('DEFAULT','REGISTERED_OFFICE')
输出如下:
place_id name email_address phone fax web_address vat_registration companyregno default_address registered_address second_address third_address fourth_address city zippost
TEST01 Company1 NULL NULL NULL NULL 2345678 123456 address1, road1 NULL NULL NULL NULL city1 NULL
TEST01 Company1 NULL NULL NULL NULL 2345678 123456 NULL address2,road2 NULL NULL NULL city2 NULL
但是,我想要实现的是单行输出,其中默认地址和注册地址在单行输出上:
place_id name email_address phone fax web_address vat_registration companyregno default_address registered_address second_address third_address fourth_address city our_zippost
TEST01 Company1 test@test.co.uk 0123456789 0123456789 test@test.com 2345678 123456 address1,road1 address2,road2 NULL NULL NULL NULL NULL
任何帮助将不胜感激!
【问题讨论】:
-
您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag。 Why should I tag my DBMS
-
轻松帮您,简化问题!删除大量不需要重现问题的列。看看minimal reproducible example。
-
LEFT JOIN 两次以获得同一行中的两个地址,一次用于 DEFAULT,一次用于 REGISTERED_OFFICE。
-
我使用的是 MS SQL Server 2019
-
@jarlh - 你能更详细地解释一下吗 - 因为我已经在 select 语句中有几个连接......非常感谢