Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我的查询每次都返回相同的时间(date2)_Mysql_Sql - Fatal编程技术网

Mysql 我的查询每次都返回相同的时间(date2)

Mysql 我的查询每次都返回相同的时间(date2),mysql,sql,Mysql,Sql,每次查询结果都会向所有行返回相同的日期(一行),即使mysql中的日期不同。如前所述,值得切换到较新的ANSI 92连接语法,以清楚起见,这可以避免意外的交叉连接,因此您的查询将变为: SELECT o.Date1, o.Date2 FROM customers AS c, products AS p, products_ids AS pi, orders AS o, temptable AS te WHERE p.productid = pi.productidD AND pi.pro

每次查询结果都会向所有行返回相同的日期(一行),即使mysql中的日期不同。

如前所述,值得切换到较新的ANSI 92连接语法,以清楚起见,这可以避免意外的交叉连接,因此您的查询将变为:

SELECT  o.Date1, o.Date2 
FROM customers AS c, products AS p, products_ids AS pi, orders AS o, temptable AS te 
WHERE p.productid = pi.productidD 
AND pi.prodno = te.prodno 
AND c.custid = o.custid
AND o.custid = te.custid 
AND te.custid =  '24' 
GROUP BY pi.productiD
但是,这不是查询中的问题,问题在于您滥用MySql中的功能,您可以通过以下方式选择不属于组的项:

在这里,您告诉查询为
pi.ProductID
的每个不同值选择一行,每个
pi.ProductID
o.Date1
o.Date2
可能有多个不同的值,并且您没有给查询任何提示,说明可以从这些多个可能性中选择哪一个

ANSI标准允许在select中使用不在group by中的列,但仅当select中的列在功能上依赖于group by中的列时,这是很难遵守的,因此大多数DBMS不允许select中不在group by中的列

演示如何考虑此数据集(t)

如果(如您的情况)您这样做了:

您可能会得到:

SELECT  OrderID, ProductID, Date1, Date2
FROM    T
GROUP BY ProductID
仅为每个产品ID取第一行,但是由于查询是不确定的,因此查询返回每个产品ID的最后一行同样正确:

OrderID ProductID   Date1       Date2
1       1           20130401    20130402
3       2           20130403    20130404
这是一个常见的神话,增加订单将有助于这一点,例如

OrderID ProductID   Date1       Date2
2       1           20130402    20130403
5       2           20130405    20130406
MySql在应用order by之前确定要返回的行,因此即使添加
order by OrderID
也不能保证返回每个productID的第一个订单

国家

服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。此外,添加ORDERBY子句不会影响从每个组中选择值

最后,我要详细说明我所说的功能相关列,因为在这个数据集中,
OrderID
是一个主键,根据ANSI标准,您可以编写:

SELECT  OrderID, ProductID, Date1, Date2
FROM    T
GROUP BY ProductID
ORDER BY OrderID;

所以,虽然我没有真正回答你的问题,但我希望我已经指出了你的错误所在。你真的需要确定你正试图通过团队实现什么,如果你仍然没有解决方案,那么我建议一个新的、更具建设性的问题,包括样本数据和预期输出,以及关于expexted输出为什么是expexted的清晰规则。

。您需要学习正确的连接语法。一旦你用
join
编写它,你就不会遇到意外的笛卡尔乘积问题。@marina你看不到Gordon的评论吗?我看到了,但我不知道怎么做it@marina这里是一个开始的好地方,谢谢!!!我会查一查的,非常感谢你!我很感激!
OrderID ProductID   Date1       Date2
2       1           20130402    20130403
5       2           20130405    20130406
SELECT  OrderID, ProductID, Date1, Date2
FROM    T
GROUP BY ProductID
ORDER BY OrderID;
SELECT  OrderID, ProductID, Date1, Date2
FROM    T
GROUP BY OrderID;