我已经使用MySQL一段时间了,最近才发现需要更好地管理我的数据(MOAR data!)。。。
我遇到的问题是:
Table1: users
- id
Table2: companies
- companyid
- companyname
Table3: customers
- customerid
- companyid
我正在尝试查询以下内容。
我有用户ID,我需要使用它从使用customerid的客户那里获得companyid,并根据客户中分配的companyid返回companyname。
很有可能我在这件事上大错特错。我知道,随着数据的增长,最终数据将变得很难用肉眼读取。我关心的是是否有能力将客户与企业联系起来并解除联系。
如果你有任何建议,或者有更好的策略,或者认为我应该把这些信息添加到用户表中,请告诉我。
首先,您需要了解什么是规范化: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表合并为一个表。但是,在"用户"或"客户"表中都有公司信息绝对是不允许的。
假设customers.customerid
和users.id
是相同的值,这就足够了:
SELECT companies.companyname
FROM customers
LEFT JOIN companies ON customers.companyid = companies.companyid
WHERE customers.customerid = 5
这是小提琴
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 |
+---------------------+
代表作战部发布。
我得到了我正在寻找的以下结果:
SELECT t2.companyname FROM companies t2,customers t3 WHERE t3.companyid = t2.companyid AND t3.customerid=?
我不知道我可以创建引用,这将对我非常有用。谢谢!