LEFT JOIN和其他一些属性出现问题

时间:2019-05-05 16:24:23

标签: php mysql

那是我的查询

$sel = mysql_query("SELECT store.mainpnid AS mainpnid, store.status AS status, store.owner as owner, SUM(store.cnt) AS total 
  FROM store 
  LEFT JOIN parts ON parts.id=store.mainpnid 
  LEFT JOIN parts ON parts.minimum > total 
  WHERE station='SOF' status='SA' AND owner='GL' GROUP BY mainpnid") or die(mysql_error());

现在返回Not unique table/alias: 'parts'

主要思想是我必须对两个表的一个查询取最小值。

Parts使用的列:idminimums

Storemainpnidstatusownerstationcnt

我在Parts表中有一个主要产品,他们在表存储中有一些批次,它们的数量之间存在差异,我要SUM每种产品的所有数量,并检查是否满足以下最低要求在表parts中。

  • mainpnidparts表中零件的ID。
  • owner是静态的,称为GL
  • cnt是每批次的数量
  • status是静态的,称为SA(可服务)
  • station是静态的,称为SOF

有人可以纠正我的查询吗?

1 个答案:

答案 0 :(得分:0)

除非您使用两个具有不同别名的表,否则您将两次使用同一表 无论如何,您似乎想要过滤结果以获取SUM(store.cnt)的汇总结果总别名。 有子句

SELECT store.mainpnid AS mainpnid
 , store.status AS status
 , store.owner as owner, SUM(store.cnt) AS total 
FROM store 
LEFT JOIN parts ON parts.id=store.mainpnid 

WHERE station='SOF' 
AND status='SA' 
AND owner='GL' 
GROUP BY mainpnid, store.status, store.owner 
HAVING b.minimum > total 

最后一次在select列中没有聚集,这在最新的mysql版本中是不允许的(默认)。您应该或将这些列添加到group by子句中,或使用如下所示的适当聚集功能

$sel = mysql_query("
  SELECT store.mainpnid AS mainpnid
    , max(store.status) AS status
    , max(store.owner) as owner
    , SUM(store.cnt) AS total 
  FROM store LEFT JOIN parts ON parts.id=store.mainpnid 
  WHERE station='SOF' 
  AND status='SA' 
  AND owner='GL' 
  GROUP BY mainpnid 
  HAVING parts.minimum > total
  ") or die(mysql_error());