0

我在 MySQL 中有一个表,其中包含许多普通字段和许多“批准”字段,其中包含一个1如果有问题的数据被批准,0否则。例如,

*==============================================================*
* id  |  fname  | lname | fname_approved | lname_approved | ...*
*--------------------------------------------------------------*
* ... |   ...   |  ...  |        0       |        1       | ...*

实际上,还有更多的列,但只是更多相同。我想要做的是选择一个值,all_approved如果所有_approved字段都包含 1 则等于 1,如果任何字段包含 0 则等于 0。有什么简单的方法可以在 SQL 中执行此操作,还是我需要在我的应用程序逻辑中处理它?

4

4 回答 4

6

您可以使用乘法

select (fname_approved * lname_approved) as all_approved from my_table;

这样,如果任何 _approved 为 0,则 all_approved 将为 0,否则为 1

于 2012-10-09T07:09:25.083 回答
1

试试这个查询,

SELECT IF(fname_approval = 1 && lname_approval   = 1 && mname_approval= 1, 'all_approved ', 'Not-Approved') AS approved_status 
from table_name
于 2012-10-09T07:16:40.137 回答
0

如果批准列的数量是固定的并且其中的值是 0 或 1,那么这样的事情会有所帮助

Select (fname_approval + lname_approval + mname_approval) from <table_name>

此查询将为您提供总数,例如 3.. 这意味着所有内容都已被批准,因为列数与总数相同。如果总数较少,则意味着您没有获得所有批准。

您需要对列数进行硬编码(这不是一个好主意)。希望这可以帮助。

于 2012-10-09T07:14:51.620 回答
0
select 
  case 
    when  fname_approved=1 and lname_approved=1  then 1 as all_approved
    else 0 as not_approved
  end ;
 from my_table
于 2012-10-09T07:16:36.673 回答