比较MySQL中的三个表中的一个答案


Compare three tables for one answers in MySQL

我已经使用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.customeridusers.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=?

我不知道我可以创建引用,这将对我非常有用。谢谢!