在了解自然连接时,我遇到了查询:
Find the names of branches with customers who have an account in the bank and live in Harrison
书上的关系代数表达式如下:
用查询实现相同的:
select distinct a.branch_name from depositor d, account a, customer where d.account_number=a.account_number and customer.customer_city='Harrison';
我得到的伪元组如下:
+-------------+
| branch_name |
+-------------+
| Perryridge |
| Downtown |
| Brighton |
| Redwood |
| Mianus |
| Round Hill |
+-------------+
6 rows in set (0.00 sec)
但查询必须根据如下模式仅返回 Brighton 和 Perryridge:
mysql> select * from account;
+----------------+-------------+---------+
| account_number | branch_name | balance |
+----------------+-------------+---------+
| A101 | Downtown | 500 |
| A102 | Perryridge | 400 |
| A201 | Brighton | 900 |
| A215 | Mianus | 700 |
| A217 | Brighton | 750 |
| A222 | Redwood | 700 |
| A305 | Round Hill | 350 |
+----------------+-------------+---------+
7 rows in set (0.00 sec)
mysql> select * from customer;
+---------------+-----------------+---------------+
| customer_name | customer_street | customer_city |
+---------------+-----------------+---------------+
| Adams | Spring | Pittsfield |
| Brooks | Senator | Brooklyn |
| Curry | North | Rye |
| Glenn | Sand Hill | Woodside |
| Green | Walnut | Stamford |
| Hayes | Main | Harrison |
| Johnson | Alma | Palo Alto |
| Jones | Main | Harrison |
| Lindsay | Park | Pittsfield |
| Smith | North | Rye |
| Turner | Putnam | Stamford |
| Williams | Nassau | Princeton |
+---------------+-----------------+---------------+
12 rows in set (0.00 sec)
mysql> select * from depositor;
+---------------+----------------+
| customer_name | account_number |
+---------------+----------------+
| Hayes | A102 |
| Johnson | A101 |
| Johnson | A201 |
| Jones | A217 |
| Lindsay | A222 |
| Smith | A215 |
| Turner | A305 |
+---------------+----------------+
7 rows in set (0.00 sec)
我哪里出错了?
最佳答案
您可能会忘记存款人和客户之间的联系。
depositor.customer_name = customer.customer_name
所以整个查询应该是:
SELECT DISTINCT a.branch_name
FROM depositor d, account a, customer
WHERE d.account_number = a.account_number
AND d.customer_name = customer.customer_name
AND customer.customer_city='Harrison'
结果:
+-------------+
| branch_name |
+-------------+
| Perryridge |
| Brighton |
+-------------+
2 rows in set (0.00 sec)
关于mysql - 无法正确连接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30962746/