带有联接的Sql更新失败


Sql Update with Joins is failing

我有这个查询,返回一个错误,显示"您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,在第1行的'FROM Sales JOIN Sales ON Inventory.saleID=Sales.ID JOIN Customers ON Sales.custo'附近找到正确的语法

这是我的问题。我知道我没有使用别名,所以它看起来很难看,但语法似乎是正确的,并且我传入的变量不为空,我已经将它们回显了。

 $sql = "UPDATE Sales SET salequantity='$takeCount' 
       FROM `Sales` 
       JOIN Sales ON Inventory.saleID=Sales.ID 
       JOIN Customers ON Sales.customerID=Customers.ID 
       JOIN Products ON Inventory.productID = Products.ID 
      JOIN Categories ON Products.categoryID=Categories.ID 
      WHERE Customers.ID='$customersID' AND Products.ID='$id'";

这是我的模式

CREATE TABLE Categories
(
ID int NOT NULL auto_increment,
type varchar(255),
description varchar(255),
PRIMARY KEY (ID)
);
CREATE TABLE Products
(
ID int NOT NULL auto_increment,
categoryID int,
customerID int,
name varchar(255),
description varchar(255),
price float(10),
quantity int(10),
PRIMARY KEY (ID),
FOREIGN KEY (categoryID) REFERENCES Categories(ID)
);
CREATE TABLE Customers
(
ID int NOT NULL auto_increment,
productID int,
name varchar(255),
street varchar(255),
city varchar(255),
state varchar(255),
zip int(8),
username varchar(255),
password varchar(255),
confirm_password varchar(255),
phone varchar(255),
PRIMARY KEY (ID),
);
CREATE TABLE Sales
(
ID int NOT NULL auto_increment,
customerID int,
amount float(15),
salequantity int(10),
PRIMARY KEY (ID),
FOREIGN KEY (customerID) REFERENCES Customers(ID)
);
CREATE TABLE Inventory
(
productID int,
saleID int,
FOREIGN KEY (productID) REFERENCES Products(ID),
FOREIGN KEY (saleID) REFERENCES Sales(ID)
);

这是最后一个查询。只要这个简单的工作。

UPDATE Sales  INNER JOIN Sales ON Inventory.saleID=Sales.ID SET salequantity=2 where Sales.customerID=1 AND Inventory.productID=1;

从第一条注释运行了查询,但也失败了。

UPDATE Sales SET salequantity=5 FROM Sales JOIN Inventory ON Inventory.saleID=Sales.ID JOIN Customers ON Sales.customerID=Customers.ID JOIN Products ON Inventory.productID = Products.ID JOIN Categories ON Products.categoryID=Categories.ID where Customers.ID=1 AND Products.ID=1;

解决方案聚合函数这是完美的

$customerProducts = mysql_query("select Products.ID, Products.name, Products.description, Products.quantity,Products.price, Categories.type, Sales.ID, Sales.customerID, Sales.amount, Sales.salequantity, Inventory.productID, Inventory.saleID, Customers.ID, Customers.productID, COUNT(Products.name) AS productsCount from(((( Inventory INNER JOIN Sales ON Inventory.saleID=Sales.ID) JOIN Customers ON Sales.customerID=Customers.ID) JOIN Products ON Inventory.productID = Products.ID) JOIN Categories ON Products.categoryID=Categories.ID) where Customers.ID ='$customersID' GROUP BY Products.name");

架构

create table sales (id varchar(10), customerid varchar(10), salequantity varchar(10))
create table Inventory (id varchar(10), productID varchar(10), saleID varchar(10))
create table Customers (id varchar(10))
create table Products (id varchar(10), categoryID varchar(10))
create table Categories (id varchar(10))

更正的查询

UPDATE Sales SET salequantity='$takeCount' 
  FROM Sales JOIN Inventory ON Inventory.saleID=Sales.ID
             JOIN Customers ON Sales.customerID=Customers.ID
             JOIN Products ON Inventory.productID = Products.ID
             JOIN Categories ON Products.categoryID=Categories.ID
  where Customers.ID='$customersID' AND Products.ID='$id'

输出

(0行受影响(

更改为查询

在第一次联接中,实际查询类似于"FROM Sales join Sales ON Inventory.saleID=Sales.ID",将其更正为"FROM Sales加入InventoryON Inventory。saleID=Sales.ID"。目前尚不清楚您想要的输出是什么。但上述查询将解决编译错误。

$customerProducts = mysql_query("select Products.ID, Products.name, Products.description, Products.quantity,Products.price, Categories.type, Sales.ID, Sales.customerID, Sales.amount, Sales.salequantity, Inventory.productID, Inventory.saleID, Customers.ID, Customers.productID, COUNT(Products.name) AS productsCount from(((( Inventory INNER JOIN Sales ON Inventory.saleID=Sales.ID) JOIN Customers ON Sales.customerID=Customers.ID) JOIN Products ON Inventory.productID = Products.ID) JOIN Categories ON Products.categoryID=Categories.ID) where Customers.ID ='$customersID' GROUP BY Products.name");

这正是我想要的。我试着把它变得复杂,却忘记了聚合。