Mysql 有没有一个工具可以帮助我理解为什么SQL查询结果中包含某一行?

Mysql 有没有一个工具可以帮助我理解为什么SQL查询结果中包含某一行?,mysql,sql,Mysql,Sql,我正在维护一个传统的应用程序,其中SQL查询看起来像魔鬼的手工艺品——在我放弃并重写整个该死的东西之前,我希望使用更好的工具来做外科手术:) 我想知道当有很多或时,哪个“WHERE”子句导致包含某些行。更好的是,为什么某些行被排除在结果集中 (特别是我使用的是MySQL)将where条件移动到case语句中。将每个“OR”分解为它自己的列,结果将显示哪个返回true和false 我还没有听说有一个工具可以为您这样做。将您的where条件移动到case语句中。将每个“OR”分解为它自己的列,结果将

我正在维护一个传统的应用程序,其中SQL查询看起来像魔鬼的手工艺品——在我放弃并重写整个该死的东西之前,我希望使用更好的工具来做外科手术:)

我想知道当有很多
时,哪个“WHERE”子句导致包含某些行。更好的是,为什么某些行被排除在结果集中


(特别是我使用的是MySQL)

将where条件移动到case语句中。将每个“OR”分解为它自己的列,结果将显示哪个返回true和false


我还没有听说有一个工具可以为您这样做。

将您的where条件移动到case语句中。将每个“OR”分解为它自己的列,结果将显示哪个返回true和false


我还没有听说有一种工具可以帮你做到这一点。

这是Pirion方法的一种变体

不要使用case语句,而是使用
select
语句中的每个
where
子句。因此,一个条件如下:

select t.*
from t
where A or B or C or D
将成为:

select t.*,
       (Acomp) as A,
       (Bcomp) as B,
       (Ccomp) as C, 
       (Dcomp) as D
from t
where Acomp or Bcomp or Ccomp or Dcomp
MySQL具有很好的特性,即布尔值返回为
0
(false)或
1
(true)。这将允许您查看给定行匹配的所有条件

然后,您可以通过删除或组合条件来简化逻辑

如果条件是计算密集型的或非常长(例如使用子查询),您可能希望使用子查询执行此操作:

select t.*
from (select t.*,
       (Acomp) as A,
       (Bcomp) as B,
       (Ccomp) as C, 
       (Dcomp) as D
      from t
     ) t
where A or B or C or D;

这是Pirion方法的一个变体

不要使用case语句,而是使用
select
语句中的每个
where
子句。因此,一个条件如下:

select t.*
from t
where A or B or C or D
将成为:

select t.*,
       (Acomp) as A,
       (Bcomp) as B,
       (Ccomp) as C, 
       (Dcomp) as D
from t
where Acomp or Bcomp or Ccomp or Dcomp
MySQL具有很好的特性,即布尔值返回为
0
(false)或
1
(true)。这将允许您查看给定行匹配的所有条件

然后,您可以通过删除或组合条件来简化逻辑

如果条件是计算密集型的或非常长(例如使用子查询),您可能希望使用子查询执行此操作:

select t.*
from (select t.*,
       (Acomp) as A,
       (Bcomp) as B,
       (Ccomp) as C, 
       (Dcomp) as D
      from t
     ) t
where A or B or C or D;

在深入研究SQL字符串之前,您可能希望掌握编写SQL字符串的基本知识。我不想听起来像个混蛋,但这个问题是SQL 101。不,这是SQL 101之前的版本。(我发表了评论,但意识到编辑这个问题会更好地解释我的情况-见新的介绍)@JohnnyBones,它实际上是布尔代数,在低年级数学课甚至高中都有涉及。:-)我有同情心,只是因为这是一个传统的应用程序,而我一直在那里。您可以发布SQL字符串吗?仅凭这些信息我无法回答你的问题,但我可以为你指出正确的方向。我不知道这是因为WHERE子句、HAVING子句还是JOIN而没有看到SQL的样子。这是mods通常会解决的问题之一,因为没有任何具体的问题。我能给出的最好建议是去掉所有WHERE子句,一次只添加一个,然后重新运行查询。您可以看到每一步都有哪些额外的行。不幸的是,这更像是“蛮力”而不是“科学”。老实说,我有时会同时运行5个查询并查看结果,以查看其中一个查询中有哪些内容不在另一个查询中。它会变得杂乱无章,但你最终会在数据中看到一些东西。你可能希望在深入研究SQL字符串之前掌握编写SQL字符串的基本知识。我不想听起来像个混蛋,但这个问题是SQL 101。不,这是SQL 101之前的版本。(我发表了评论,但意识到编辑这个问题会更好地解释我的情况-见新的介绍)@JohnnyBones,它实际上是布尔代数,在低年级数学课甚至高中都有涉及。:-)我有同情心,只是因为这是一个传统的应用程序,而我一直在那里。您可以发布SQL字符串吗?仅凭这些信息我无法回答你的问题,但我可以为你指出正确的方向。我不知道这是因为WHERE子句、HAVING子句还是JOIN而没有看到SQL的样子。这是mods通常会解决的问题之一,因为没有任何具体的问题。我能给出的最好建议是去掉所有WHERE子句,一次只添加一个,然后重新运行查询。您可以看到每一步都有哪些额外的行。不幸的是,这更像是“蛮力”而不是“科学”。老实说,我有时会同时运行5个查询并查看结果,以查看其中一个查询中有哪些内容不在另一个查询中。它会变得混乱,但你最终会在数据中看到一些东西。