2015-02-08 64 views
-1

我有加入小问题。我有4张桌子。多个内部联接与哪里条款 - 4表

as_ticmat TBL加盟as_mat TBL这样我就可以得到名来自列as_mat TBL同样的事情
as_sertic TBL加盟as_ser TBL但只有一个条件。这是从as_ticmat TBL的tic_id柱必须等于1,以及从as_sertic TBL的tic_id柱必须等于1

这里是我的表

mysql> TBL: as_ticmat; 
+--------------+---------+---------+-----------+ 
| ticmat_id | mat_id | tic_id | matprice | 
+--------------+---------+---------+-----------+ 
|   1 |  1 |  1 |  20.00 | 
|   2 |  2 |  1 |  30.00 | 
|   3 |  3 |  4 | 640.00 | 
|   4 |  4 |  4 | 500.00 | 
+--------------+---------+---------+-----------+ 

mysql> TBL: as_mat; 
+-----------+-------------------+ 
| mat_id | name    | 
+-----------+-------------------+ 
|   1 | XXXX - XXXXX - XX | 
|   2 | XXXX - XXXXX - XX | 
|   3 | XXXX - XXXXX - XX | 
|   4 | XXXX - XXXXX - XX | 
+-----------+-------------------+ 

mysql> TBL: as_sertic; 
+--------------+---------+---------+---------+---------+ 
| sertic_id | tic_id | ser_id | mec_id | rate | 
+--------------+---------+---------+---------+---------+ 
|   1 |  1 |  2 |  4 | 500.00 | 
|   2 |  1 |  3 |  4 | 1000.00 | 
|   3 |  4 |  4 |  4 | 420.00 | 
|   4 |  4 |  5 |  4 | 420.00 | 
+--------------+---------+---------+---------+---------+ 

mysql> TBL: as_ser; 
+------------+----------+--------+ 
| ser_id  | name  | price | 
+------------+----------+--------+ 
|   1 | XXX XXXX | 50.00 | 
|   2 | XXX XXXX | 50.00 | 
|   3 | XXX XXXX | 250.00 | 
|   4 | XXX XXXX | 210.00 | 
|   5 | XXX XXXX | 210.00 | 
+------------+----------+--------+ 

这是我的查询。

SELECT `as_ticmat`.`tickmat_id`, 
     `as_ticmat`.`mate_id`, 
     `as_ticmat`.`mateprice`, 
     `as_sertic`.`sertic_id`, 
     `as_sertic`.`ser_id`, 

SUM  (as_tictmat.matprice`) AS `mat` 
SUM  (as_sertic.rate)  AS `ser` 
FROM  `as_ticmat` 
INNER JOIN `as_sertic` 
ON   `as_sertic`.`ser_id` = `as_ser`.`ser_id` 
INNER JOIN `as_mate` 
ON   `as_ticmat`.`mat_id` = `as_mat`.`mat_id` 
WHERE  `tic_id` = 1 
+0

你说你有一个小问题,但我没有看到任何问题? – jpw 2015-02-08 17:42:14

+0

对不起,忘了提我的问题。有sql错误..我只是不能完成 – 2015-02-08 17:44:54

+0

这个查询是否需要一个'group by'子句?还是满足于一行结果? – 2015-02-08 17:56:57

回答

1

您的查询有几个拼写错误,缺少逗号,你也从未加入as_ser表。我认为,改正后的查询应该是这样的:

SELECT as_ticmat.ticmat_id, 
     as_ticmat.mat_id, 
     as_ticmat.matprice, 
     as_sertic.sertic_id, 
     as_sertic.ser_id, 
     SUM(as_ticmat.matprice) AS mat, 
     SUM(as_sertic.rate)  AS ser 
FROM  as_ticmat  
INNER JOIN as_sertic 
ON   as_sertic.ser_id = as_ticmat.tic_id 
INNER JOIN as_ser 
ON   as_sertic.ser_id = as_ser.ser_id 
INNER JOIN as_mat 
ON   as_ticmat.mat_id = as_mat.mat_id 
WHERE  as_ticmat.tic_id = 1 

所有这些错误很容易从出现的错误信息找到...

对于大多数SQL数据库,您还需要一个group by条款的因为你正在使用一个聚合函数(MySQL是一个例外,因为它不需要group by子句,但是如果你分组数据,你不会得到结果),在这种情况下你应该添加

GROUP BY 
     as_ticmat.ticmat_id, 
     as_ticmat.mat_id, 
     as_ticmat.matprice, 
     as_sertic.sertic_id, 
     as_sertic.ser_id 

在查询结束时年。

+0

哦,我没有看到,甚至认为我已经检查了几次查询。感谢“JPW”我会检查查询希望它的工作.. – 2015-02-08 17:55:11

+1

感谢pro..it的作品。这是一些错别字,我讨厌... :) – 2015-02-08 20:05:02