查询SQL数据库 - 一对多查询

时间:2015-11-12 08:07:14

标签: mysql

我有2个表(客户和报告)。他们有一对多的关系。我想得到一个客户和所有属于这个cusotmer的报告。这是我的表的结构:

CUSTOMER:
+----+----------+-----+-----------+
| ID | Lastname | AGE | ADDRESS   |
+----+----------+-----+-----------+
|  1 | Ramesh   |  32 | Ahmedabad |
|  2 | Khilan   |  25 | Delhi     |
+----+----------+-----+-----------+

REPORT:
+----+-----------------+------+
| ID | Content         |state |
+----+-----------------+------+
|  1 | I am a content  |  ok  | 
|  1 | I am a content  |  ok  |
+----+----------+------+------+

所以现在我想查询我的数据库中的客户Ramesh并获得具有相同ID的所有报告。我想在表格中显示报告,在某些文本字段中显示客户数据。

有没有办法通过一个查询获取所有信息或者我是否需要更多查询?一个用于客户,一个用于所有报告?

3 个答案:

答案 0 :(得分:1)

select a.*, b.* from customer a join report b on (a.ID =b.ID)
where a.ID=1

答案 1 :(得分:1)

我认为你的DB-Design需要修改。你可以看here。它是关于数据库规范化的一个解释。

在您的情况下,我会在您的REPORT表中添加一个新列。您需要这个库存来将您的桌子彼此连接起来,并将您的报告提交给您的顾客。所以我的建议是:

REPORT:
+----+-----------------+------+-------------+
| ID | Content         |state |Coustomer_ID |
+----+-----------------+------+-------------+
|  1 | I am a content  |  ok  |      1      |
|  1 | I am a content  |  ok  |      1      |
+----+----------+------+------+-------------+

使用这个额外的列,您可以使用WHERE语句连接表:

WHERE COUSTOMER.ID = REPORT.COUSTOMER_ID

或使用JOIN法规

COUSTOMER INNER JOIN REPORT ON COUSTOMER.ID = REPORT.COUSTOMER_ID

请注意,有不同的方式来连接表格。 See here for a little explantion

现在您已准备好获取数据:

SELECT * FROM COUSTOMER WHERE Lastname = 'Ramesh' AND WHERE COUSTOMER.ID = REPORT.COUSTOMER_ID;

或加入:

SELECT * FROM COUSTOMER INNER JOIN REPORT ON COUSTOMER.ID = REPORT.COUSTOMER_ID WHERE COUSTOMER.ID = 1;

两种情况下的输出应该看起来像这样:

+----+----------+-----+-----------+----+-----------------+------+-------------+
| ID | Lastname | AGE | ADDRESS   | ID | Content         |state |Coustomer_ID |
+----+----------+-----+-----------+----+-----------------+------+-------------+
|  1 | Ramesh   |  32 | Ahmedabad |  1 | I am a content  |  ok  |      1      |
|  2 | Ramesh   |  32 | Ahmedabad |  1 | I am a content  |  ok  |      1      |
+----+----------+-----+-----------+----+----------+------+------+-------------+

我希望有帮助

答案 2 :(得分:0)

在我看来,你必须在REPORT表中添加一个带有Coustomer-ID的coulom,这样你才能连接这两个表格。完成后,您可以按名称搜索coustomer:

SELECT * FROM COUSTOMER WHERE Lastname = Ramesh AND WHERE COUSTOMER.ID = REPORT.COUSTOMER_ID;

或他的身份证明:

SELECT * FROM COUSTOMER WHERE COUSTOMER.ID = 1 AND WHERE COUSTOMER.ID = REPORT.COUSTOMER_ID;