Mysql 尝试按排序时出现未知错误,以防
订购人 返回一个错误子查询返回多行,但如果我删除ORDER BY或按其他列对其排序,则查询运行时不会出错 截图:Mysql 尝试按排序时出现未知错误,以防,mysql,Mysql,订购人 返回一个错误子查询返回多行,但如果我删除ORDER BY或按其他列对其排序,则查询运行时不会出错 截图: 您需要提供更多详细信息,说明为什么在此处使用案例陈述。您试图通过此查询获得的结果是什么?您的查询从bizboxgntr xxx中选择countxxx.FK_psPatRegisters,其中xxx.FK_psPatRegisters=a.FK_psPatRegisters,并从bizboxgntr aa中选择distinct SELECT sumaa.amount,其中aa.FK_
您需要提供更多详细信息,说明为什么在此处使用案例陈述。您试图通过此查询获得的结果是什么?您的查询从bizboxgntr xxx中选择countxxx.FK_psPatRegisters,其中xxx.FK_psPatRegisters=a.FK_psPatRegisters,并从bizboxgntr aa中选择distinct SELECT sumaa.amount,其中aa.FK_employee=xxy.FK_employee和yearaa.datetime=yearxxy.datetime从bizboxgntr xxy中选择xxy.FK_psPatRegisters=a、 FK_psPatRegisters<20000将不会返回单行。@Sameer Mirji但如果我删除ORDER BY子句,查询将正常运行,这怎么可能?如果上面的查询返回的值超过1,即使没有ORDERBY子句,它仍然会有一个错误。问题不是这样。您编写的查询本身似乎没有任何意义。您试图通过此查询实现什么?解释一下你想在这里过滤哪些数据。Sameer是对的。我假设子查询返回多行,但不指定任何顺序,mysql只选择第一个结果进行比较。请注意,这很可能不是您想要的结果,因为每个子选择的第一个结果是未指定的。在我看来,mysql也应该给出错误,而不使用order by,但是通过尽可能地提供帮助,它不会。我试图过滤掉所有FK_psPatRegisters示例:如果FK_psPatRegisters在表trxpost中,我将其标记为1,如果FK_psPatRegisters在表bizboxgntr中,并且数量小于2000,我将其标记为2,如果FK_psPatRegisters在表bizboxgntr中且等于20000,则将其标记为4;如果FK_psPatRegisters在表bizboxgntr中且大于2000,则将其标记为5,否则为3
SELECT
*,
a.FK_psPatRegisters,
CASE
WHEN (SELECT count(x.FK_psPatRegisters) FROM trxpost x WHERE x.FK_psPatRegisters = a.FK_psPatRegisters AND a.FK_psPatRegisters
NOT IN (SELECT FK_psPatRegisters FROM bizboxgntr)) > 1 THEN 1
WHEN (SELECT count(xxx.FK_psPatRegisters) FROM bizboxgntr xxx WHERE xxx.FK_psPatRegisters = a.FK_psPatRegisters) AND
(SELECT distinct (SELECT sum(aa.amount) FROM bizboxgntr aa WHERE aa.FK_employee = xxy.FK_employee AND year(aa.datetime) = year(xxy.datetime))
FROM bizboxgntr xxy WHERE xxy.FK_psPatregisters = a.FK_psPatRegisters) < 20000 THEN 2
WHEN (SELECT distinct (SELECT sum(ab.amount) FROM bizboxgntr ab WHERE ab.FK_employee = xxz.FK_employee AND year(ab.datetime) = year(xxz.datetime))
FROM bizboxgntr xxz WHERE xxz.FK_psPatregisters = a.FK_psPatRegisters) = 20000 THEN 4
WHEN (SELECT distinct (SELECT sum(ac.amount) FROM bizboxgntr ac WHERE ac.FK_employee = xxa.FK_employee AND year(ac.datetime) = year(xxa.datetime))
FROM bizboxgntr xxa WHERE xxa.FK_psPatregisters = a.FK_psPatRegisters) > 20000 THEN 5
ELSE 3
END AS `post`
FROM bizboxtbl a
ORDER BY post