0

我有一张表,其中列出了不同用户的寄售清单(表名是寄售)。此表包含作为 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 之类的聚合是否是问题以及如何正确解决问题。

任何建议将不胜感激。

4

1 回答 1

0

使用分组:

进行权重的示例(可以轻松添加更多 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
于 2012-11-05T12:59:54.580 回答