我一直在使用MySQL一段时间了,最近才发现需要更好地管理我的数据(MOAR DATA!)......
我遇到的问题是:
Table1: users
- id
Table2: companies
- companyid
- companyname
Table3: customers
- customerid
- companyid
我正在尝试查询以下内容。
我有用户ID,我需要使用它来使用customerid从客户那里获取companyid,并根据客户指定的companyid返回companyname。
我很可能会发生这种错误。据我所知,随着数据开始增长,数据最终会变得非常难以阅读。我担心的是能够将客户与企业联系起来和解除关联。
如果您有任何提示或有更好的策略,或者我认为我应该将此信息添加到用户表中,请告诉我们。
答案 0 :(得分:1)
首先,您需要对规范化是什么有所了解:http://support.microsoft.com/kb/283878
数据库表并不意味着“通过眼睛阅读”。我很确定你现在正在处理一个非常小的数据库,但想想未来你要处理成千上万行的数千个表,“目视检查”不再适用了。
简单的连接可以满足您的需求:
SELECT t2.companyname
FROM table1 t1, table2 t2, table3 t3
WHERE t1.id = t3.customerid
AND t3.companyid = t2.company id
AND t3.customerid = (some id) //Depends on what your purpose is,
//this line can also be replaced by
//AND t1.id = (some id)
在您的情况下,如果所有用户也是客户,则可以将User表和Customer表合并为一个。但在用户表或客户表中都有公司信息肯定是NO。
答案 1 :(得分:1)
假设customers.customerid
和users.id
的值相同,这就足够了:
SELECT companies.companyname
FROM customers
LEFT JOIN companies ON customers.companyid = companies.companyid
WHERE customers.customerid = 5
这是 fiddle
Schema在左边,sql在右边。
表的
users
+--------+
| ID |
+--------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
+--------+
companies
+------------------------------------------+
| COMPANYID COMPANYNAME |
+------------------------------------------+
| 5 CompAlumpany |
| 9 Dergy Hergins LLC |
| 3 Smergy Berg Inc. |
| 23 Hergin Derz |
| 7 Comperation corpany |
| 11 Contagion Engine |
| 31 AEther Vial |
| 66 Necropotence |
| 90 Lord of Atlantis |
| 65 Snoogins |
| 51 Nickty-Schnickty-Schnoine |
| 58 Take a knee |
| 59 Coorprate |
+------------------------------------------+
customers
+--------------------------+
| CUSTOMERID COMPANYID |
+--------------------------+
| 1 5 |
| 2 9 |
| 3 3 |
| 4 23 |
| 5 7 |
| 6 11 |
| 7 31 |
| 8 66 |
| 9 90 |
| 10 65 |
| 11 51 |
| 12 58 |
| 13 59 |
+--------------------------+
查询返回:
+---------------------+
| COMPANYNAME |
+---------------------+
| Comperation corpany |
+---------------------+
答案 2 :(得分:0)
代表OP发表。
我得到了我正在寻找的结果:
SELECT t2.companyname FROM companies t2,customers t3 WHERE t3.companyid = t2.companyid AND t3.customerid=?
我不知道我可以创建引用,这对我来说非常有用。谢谢!