여러 개의 불리언(Boolean) 열 중에서 3개 이상의 값이 TRUE인 행을 찾으려면 WHERE 절을 활용하면 됩니다. MySQL에서는 불리언 값을 정수(1 또는 0)로 처리하기 때문에, 각 열의 값을 단순히 더한 뒤 그 합계를 조건으로 비교하는 방식을 사용할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> isMarried boolean,
-> isActive boolean,
-> isMember boolean,
-> isOn boolean
-> );
Query OK, 0 rows affected (0.61 sec)INSERT 명령어를 사용해 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(true,false,true,false); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(false,false,false,false); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(true,true,true,true); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(true,false,false,true); Query OK, 1 row affected (0.55 sec)
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+-----------+----------+-----------+------+ | isMarried | isActive | isMember | isOn | +-----------+----------+-----------+------+ | 1 | 0 | 1 | 0 | | 0 | 0 | 0 | 0 | | 1 | 1 | 1 | 1 | | 1 | 0 | 0 | 1 | +-----------+----------+-----------+------+ 4 rows in set (0.00 sec)
다음은 3개 이상의 열 값이 TRUE인 행을 조회하는 쿼리입니다. 네 개의 불리언 열을 모두 더한 값이 3보다 크거나 같은지를 WHERE 절에서 판별합니다.
mysql> select *from DemoTable where isMarried+isActive+isMember+isOn >=3;
출력 결과
+-----------+----------+-----------+------+ | isMarried | isActive | isMember | isOn | +-----------+----------+-----------+------+ | 1 | 1 | 1 | 1 | +-----------+----------+-----------+------+ 1 row in set (0.00 sec)
위 결과에서 볼 수 있듯이, 네 개의 열이 모두 TRUE인 세 번째 행만 조건을 만족하여 반환되었습니다. 이처럼 불리언 열의 산술 합을 이용하면 CASE 문이나 여러 개의 OR 조건을 일일이 작성하지 않고도 간결하게 원하는 조건의 행을 필터링할 수 있습니다.