繁体   English   中英

MySQL:如果任何行有值,请检查整个列

[英]MySQL: Check entire column if any row has value

如果audio列的所有行都为空,我想有条件地切换。 我尝试过GROUP BY类型,但不起作用。

  SELECT postid, title, has_audio, audio, type 
  FROM qa_posts 
  WHERE parentid=1

在此输入图像描述

因此,如果对于执行代码A而不是代码B的父ID,整个列都存在音频

您可以只count audio不为NULL所有行。 但是如果你的表更大并且包含大量的行等,那么这种方法的真正问题在于这样的查询对于DB而言可能是昂贵的并且至少比它可能更慢。 当然,过早优化是坏事,但事实并非如此 - 我们将优化方法,而不是代码:)

如果音频列的所有行都为空,则要有条件地切换

首先,认为问题are all rows' audio column empty?会很好are all rows' audio column empty? 它真的是正确的。 和不。 它不是:)实际上你既不需要知道有how many of rows are not null也不are all rows' audio column empty? 因为如果有5,10或100000的话,这与你的情况完全无关。 你应该做的是“翻转”问题,并寻找问题的答案, if there's any row that is NOT null? 即使这两个问题在第一眼看起来都很相似,我们正在使用数据库来获得答案,所以这实际上是整个游戏改变者。

通过逻辑,回答if there's any row that is NOT null? 问题是,只需要找出至少有一行audioNOT NULL “至少”的东西允许我们对查询应用一些约束,因为1很好地满足“至少一个”条件,我们将使用SQL LIMIT 1 ,这将使DB停止并在找到第一个记录匹配时立即返回结果查询,无需通过整个表。 这应该更快,资源更少。

一旦执行,我们的查询可以返回两个结果。 要么我们得不到任何东西(零行返回),这意味着所有audio都是NULL或者相反,我们得到一些东西(单行,无关紧要哪一个),这意味着if there's any row that is NOT null? 问题是'是的,它是'(因为至少返回的是)。

WHERE audio != null做一个带有select count(*)的select语句WHERE audio != null 然后根据您收到的号码做一个条件语句。 确保将音频编入索引。

您可以简单地检查NOT NULL

SELECT * FROM `table` WHERE column IS NOT NULL AND column <> ''

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM