从mysql中的第二个表中获取第一个表中条目的详细信息

时间:2012-11-05 12:39:04

标签: mysql

我有一张表格,上面有不同用户的托运清单(表格名称是托运货物)。此表包含作为PK的寄售ID(cons_id),user_id和日期(以及其他详细信息)。

我有另一张表,其中包含这些货物的详细信息(表名是寄售)。它有item_id为PK,cons_id为FK,重量,跟踪号和货物的其他细节。此表中有多个条目具有相同的外键,与第一个表(托运)中的单个条目相关。

我想为特定用户选择第一个表格(托运)中的所有条目,以及从第二个表格中获取的详细信息(即特定货物的所有项目的总重量,这些是第二个表格中的条目表等。)。

我使用以下mysql命令:

SELECT a.cons_id, a.user_id, a.date, 
       sum(c.weight) AS weight, sum(c.weight*2) AS amount, 
       count(c.tracking) AS qty 
FROM   `consignments` AS a LEFT JOIN `consignment` AS c 
       ON c.cons_id = a.cons_id WHERE a.user_id = 103

这仅返回该特定用户的货物表中的第一项,而不返回其余条目。当然,如果我不加入第二张表,则返回所有条目。

我不确定像sum这样的聚合是否是问题以及如何正确地进行。

任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

使用group by:

做重量的例子(可以很容易地添加更多的sum()术语):

SELECT a.cons_id, a.user_id, a.date, sum(c.weight) AS weight
FROM consignment a, consignments c where a.cons_id = c.cons_id 
GROUP BY a.cons_id,a.user_id, a.date;

证明:

create table consignment ( cons_id integer, user_id integer, date timestamp );
create table consignments ( cons_id integer, item_id integer, weight integer );
insert into consignment values ( 1, 1, now());
insert into consignment values ( 2, 1, now());
insert into consignments values ( 1, 1, 10);
insert into consignments values ( 1, 2, 200);
insert into consignments values ( 2, 1, 12);
insert into consignments values ( 2, 2, 24);

运行以上查询

 cons_id | user_id |            date            | weight 
---------+---------+----------------------------+--------
       2 |       1 | 2012-11-05 23:20:34.158361 |     36
       1 |       1 | 2012-11-05 23:20:25.535398 |    210