【发布时间】:2019-08-14 08:01:12
【问题描述】:
我想提取有关存储在我的数据库中的人员和公司的信息。我有 2 个表(客户和联系人)指向包含 2 个外键(addressClientID 和 addressContactID)的唯一地址表。 客户可以有多个地址,联系人通常是一个,它可以是自定义地址(addressContactID 将指向联系人 ID,否则为 NULL)或为其工作的客户的地址。 查询应提取联系人姓名、联系人工作的公司名称和城市。后者必须是公司所在的城市(如果 addressContactID 为 NULL)或联系人所在的城市(如果 addressContactID 指向一个联系人 ID)。
我尝试了多种类型的连接,但均未成功。 DBMS 是 MySql 5.2
mysql> select * from Clients;
+----+---------+-------------+--------+
| id | name | taxCode | optOut |
+----+---------+-------------+--------+
| 1 | Client1 | 51824753556 | 0 |
| 2 | Client2 | 51824543536 | 0 |
+----+---------+-------------+--------+
2 rows in set (0.01 sec)
mysql> select * from Contacts;
+----+--------------+---------------+------------------------+------------------+------------------+--------------+-------+------------------+
| id | name | preferredName | email | mobile | phone | jobTitle | notes | contactsClientId |
+----+--------------+---------------+------------------------+------------------+------------------+--------------+-------+------------------+
| 1 | Contact 1 | NULL | contact1@gmail.com | +61 421 111111 | +61 421 22222222 | Title1 | NULL | 1 |
| 2 | Contact 2 | NULL | contact2@gmail.com | +61 421 15345431 | +61 421 263462 | Title2 | NULL | 2 |
| 4 | Contact 3 | NULL | contact3@fdsfsd.com | NULL | NULL | Title3 | NULL | 1 |
+----+--------------+---------------+------------------------+------------------+------------------+--------------+-------+------------------+
3 rows in set (0.00 sec)
mysql> select * from Address;
+----+-------------+---------+----------+-------+-----------+-----------------+------------------+---------------------+
| id | address | city | postcode | state | country | addressClientId | addressContactId | addressEngagementId |
+----+-------------+---------+----------+-------+-----------+-----------------+------------------+---------------------+
| 1 | Address n.1 | Sydney | 2000 | NSW | Australia | 1 | NULL | NULL |
| 2 | Address n.2 | Adelaide| 2010 | NSW | Australia | 2 | NULL | NULL |
| 19 | Address n.3 | Perth | 2050 | NSW | Australia | 1 | 4 | NULL |
+----+-------------+---------+----------+-------+-----------+-----------------+------------------+---------------------+
3 rows in set (0.01 sec)
预期的结果是这样的
ContactName, CompanyName, City
Contact 1, Client1, Sydney
Contact 2, Client1, Adelaide
Contact 3, Client2, Perth
【问题讨论】:
-
示例数据(作为文本)会很有用。
-
刚刚添加了一些!
-
是“(公司所在城市)”预期输出的一部分,或者只是对问题的有用评论。如果是后者,你怎么知道地址属于什么(公司或联系人)?
-
不,这不是预期的输出,我只是为了清楚起见而添加了它(我再次更改了帖子以反映表格上的数据)
-
我想
CompanyName应该是ClientName,不应该是?