如何编写SQL查询展示联系人及其所有电话号码(SQLite3/PG/MySQL)
关联联系人与电话号码的SQL查询方案
我来帮你搞定这个需求——把联系人表contacts和电话号码表phones关联起来,展示每位联系人的所有关联电话号码。下面针对你提到的SQLite3、PostgreSQL和MySQL分别给出适配的查询语句:
MySQL & SQLite3 适用语句
这两个数据库都支持GROUP_CONCAT函数来聚合多个电话号码:
SELECT c.name AS Name, GROUP_CONCAT(p.phone_number SEPARATOR ', ') AS Phones FROM contacts c LEFT JOIN phones p ON c.id = p.contact_id GROUP BY c.id, c.name;
PostgreSQL 适用语句
PostgreSQL使用STRING_AGG来实现字符串聚合:
SELECT c.name AS Name, STRING_AGG(p.phone_number, ', ') AS Phones FROM contacts c LEFT JOIN phones p ON c.id = p.contact_id GROUP BY c.id, c.name;
补充说明
- 用
LEFT JOIN是为了确保即使某个联系人没有电话号码,也会在结果里显示(此时Phones列会是NULL);如果确定所有联系人都有对应的电话,换成INNER JOIN也可以。 - 聚合函数里的
SEPARATOR ', '是用来指定电话号码之间的分隔符,你可以根据需求改成其他符号(比如换行符'\n')。
期望输出示例
| Name | Phones |
|---|---|
| Ashok | (111) 123-1111, (111) 123-2222, (111) 123-3333, (111) 123-4444 |
| Betty | (222) 456-1111, (222) 456-2222 |
| Charles | (333) 789-1111, (333) 789-2222, (333) 789-3333 |
内容的提问来源于stack exchange,提问作者MERM
相关产品推荐
相关产品推荐

