Java 为什么这些连接查询返回重复的记录?
表结构:Java 为什么这些连接查询返回重复的记录?,java,mysql,core,Java,Mysql,Core,表结构: Field Type Null Default -------------------------------------------------------------------- OrderId bigint(20) Yes II is a Primary key CustomerID bigint(20)
Field Type Null Default
--------------------------------------------------------------------
OrderId bigint(20) Yes II is a Primary key
CustomerID bigint(20) Yes
OrderDate date Yes
ShippedDate date Yes NULL
Freight int(20) Yes NULL
ShipName varchar(50) Yes NULL
ShipAddress varchar(100) Yes NULL
ShipCity varchar(50) Yes NULL
ShipPostalCode int(20) Yes NULL
ShipCountry varchar(30) Yes NULL
ShipVia int(50) Yes 1
customerPayA int(11) Yes
discount int(11) Yes
shippingPackagingCost int(11) Yes
grandTotal int(11) Yes NULL
remainPayment int(20) Yes NULL
Table structure for table orderdetails
Field Type Null Default
ProductId int(20) Yes
OrderId int(20) Yes
UnitPrice int(200) Yes
Qty int(20) Yes
vat int(11) Yes
Amount int(20) Yes
Table structure for table products
Field Type Null Default
ProductId int(20) Yes
ProductName varchar(50) Yes
Table structure for table shippers
Field Type Null Default
ShipperID int(11) Yes
companyName varchar(30) Yes
Table structure for table customers
Field Type Null Default
CustomerID int(20) Yes
firstName varchar(20) Yes
middleName varchar(20) Yes
LastName varchar(20) Yes
address varchar(200) Yes
city varchar(20) Yes
postalcode int(10) Yes
country varchar(20) Yes
选择查询:
SELECT DISTINCT
o.OrderID, o.CustomerID,
c.firstName as BillName ,
s.CompanyName as ShipperName,
p.ProductName, od.UnitPrice, od.Qty, od.Amount,
o.grandTotal
FROM
Orders o
JOIN
Customers c ON o.CustomerID = c.CustomerID
JOIN
Shippers s ON o.ShipVia = s.ShipperID
JOIN
OrderDetails od ON o.OrderID = od.OrderID
JOIN
Products p ON od.ProductID = p.ProductID
WHERE
o.OrderID =46
OrderID CustomerID BillName Shipper Product UnitPrice Qty Amount grandTotal
46 1 bharat balaji evergreent 400 4 1600 3885
46 1 bharat balaji evergreent 400 4 1600 3885
46 1 bharat balaji corogen 700 3 2100 3885
46 1 bharat balaji corogen 700 3 2100 3885
您正在通过以下方式查找组: 您的查询应如下所示:-
"SELECT o.OrderID, o.CustomerID, o.OrderDate, o.ShippedDate, o.Freight, o.customerPayAmount, " +
"o.ShipName, o.ShipAddress, o.ShipCity, o.ShipPostalCode, o.ShipCountry, " +
"c.firstName as BillName, c.Address as BillAddress, " +
"c.City as BillCity, c.PostalCode as BillPostalCode, " +
"c.Country as BillCountry, s.CompanyName as ShipperName, " +
"p.ProductName, od.UnitPrice, od.Qty,od.Amount, " +
"o.discount, o.shippingPackagingCost, od.vat, o.grandTotal, o.remainPayment "+
"FROM Orders o " +
"JOIN Customers c ON " +
"o.CustomerID = c.CustomerID " +
"JOIN Shippers s ON " +
"o.ShipVia = s.ShipperID " +
"JOIN OrderDetails od ON " +
" o.OrderID = od.OrderID " +
"JOIN Products p ON " +
"od.ProductID = p.ProductID " +
"WHERE o.OrderID = ? "+
"group by o.OrderID,c.firstName,s.CompanyName,od.UnitPrice,p.ProductName");
您正在通过以下方式查找组: 您的查询应如下所示:-
"SELECT o.OrderID, o.CustomerID, o.OrderDate, o.ShippedDate, o.Freight, o.customerPayAmount, " +
"o.ShipName, o.ShipAddress, o.ShipCity, o.ShipPostalCode, o.ShipCountry, " +
"c.firstName as BillName, c.Address as BillAddress, " +
"c.City as BillCity, c.PostalCode as BillPostalCode, " +
"c.Country as BillCountry, s.CompanyName as ShipperName, " +
"p.ProductName, od.UnitPrice, od.Qty,od.Amount, " +
"o.discount, o.shippingPackagingCost, od.vat, o.grandTotal, o.remainPayment "+
"FROM Orders o " +
"JOIN Customers c ON " +
"o.CustomerID = c.CustomerID " +
"JOIN Shippers s ON " +
"o.ShipVia = s.ShipperID " +
"JOIN OrderDetails od ON " +
" o.OrderID = od.OrderID " +
"JOIN Products p ON " +
"od.ProductID = p.ProductID " +
"WHERE o.OrderID = ? "+
"group by o.OrderID,c.firstName,s.CompanyName,od.UnitPrice,p.ProductName");
你需要的是分组。如果需要返回多条记录,可能需要使用GROUP_CONCAT函数
GROUP_CONCAT( p.ProductName )
有关GROUP_CONCAT功能的更多信息,请访问开发者网站:
您需要的是分组。如果需要返回多条记录,可能需要使用GROUP_CONCAT函数
GROUP_CONCAT( p.ProductName )
有关GROUP_CONCAT功能的更多信息,请访问开发者网站:
您编写的查询很好,您使用了Distinct,这样它就不会返回重复的记录 请检查表格的原始数据
应该有重复的数据,但有微小的更改,如空格或不可见字符…您编写的查询很好,您使用了Distinct,因此它不应返回重复的记录 请检查表格的原始数据
应该有重复的数据,但有微小的变化,如空格或不可见字符…但是这个问题只返回productName=“evergreen”的一条记录,但我的要求是产品显示一次“evergreen”和“corogen”@Bharat我刚刚做了更新,我已将
p.ProductName
添加到组byTryp.ProductName
请给出任何其他建议,但此问题仅返回一条ProductName=“evergreen”记录,但我的要求是产品显示一次“evergreen”和“corogen”@Bharat我刚做了更新,我已将p.ProductName
添加到组中,请尝试按p.ProductName分组
请给出任何其他建议,我也可以在上面显示result@Bharat到底是什么问题?哪个字段不在您的查询结果中?@PooyRaki问题是产品记录显示为两份。您可以查看上面的结果产品“evergreen”和“corogen”@Bharat所以我已经回答了在您的问题末尾添加p.ProductName的group_的问题请给我建议这也是同样的显示result@Bharat到底是什么问题?哪个字段不在您的查询结果中?@PooyRaki问题是产品记录显示为两份。您可以查看上面的结果产品“evergreen”和“corogen”@Bharat所以我已经回答了问题,请在您的问题末尾添加p.ProductName的group_请给我建议谢谢给我建议谢谢