我有一张表格,上面有不同用户的托运清单(表格名称是托运货物)。此表包含作为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这样的聚合是否是问题以及如何正确地进行。
任何建议都将受到高度赞赏。
答案 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