【发布时间】:2018-01-19 00:38:18
【问题描述】:
假设我有一个无法修改的名为“公司”的视图:
+------------+--------------------+--------+--------+------------------------+
| company_id | company_name | ceo | cfo | legal_contacts |
+------------+--------------------+--------+--------+------------------------+
| 1 | johnson and son | pid111 | pid333 | pid444, pid567, pid999 |
| 2 | Pepperville apples | pid777 | | pid345 |
| 3 | Cats LTD | pid123 | pid321 | |
+------------+--------------------+--------+--------+------------------------+
还有一个叫做“联系人”的视图:
+-----------+-------+----------------------+
| person_id | name | email |
+-----------+-------+----------------------+
| pid111 | john | john@gmail.com |
| pid333 | steve | funkylover@mail.com |
| pid444 | mary | mar123@ymail.com |
| pid999 | joe | joe.bloggs@gmail.com |
| pid777 | louis | |
| pid345 | carol | carol@carolssite.com |
| pid321 | ellen | ellen.deg@gmail.com |
+-----------+-------+----------------------+
我的最终目标是编写一个交叉引用人员 ID 并显示电子邮件和公司的查询,例如:
+---------+----------------+-----------------------------------------+
| company | ceo | legal_contacts |
+---------+----------------+-----------------------------------------+
| 1 | john@gmail.com | mary123@ymail.com, joe.bloggs@gmail.com |
| 2 | | carol@carossite.com |
| 3 | | |
+---------+----------------+-----------------------------------------+
有没有办法让我在不编写函数或进程的情况下在查询中加入或处理这个逗号分隔的标识符列表?
您可以假设“法律联系人”最多有 25 个标识符,始终采用相同格式,始终以逗号分隔
【问题讨论】:
-
将值存储为 csv 是非常糟糕的数据库设计。规范化您的表格
-
“我有一个名为“公司”的视图,我无法修改”...
-
我真的认为你应该看看视图的 ddl,
companies。legal_contacts的来源是 csv 列吗?如果不是这种情况,我会强烈建议查看其与contacts和company表关联的外键(必须有)并重新考虑此要求的来源。 -
@PatrickBacon 是的,不幸的是,它的源代码是 CSV。它没有以标准化格式存储在数据库中的任何位置,我无法修改表或视图。真正的表格/视图实际上比我在问题中的简化示例要复杂得多。