【SQL】WHERE 1 = 1

WHERE 1 = 1 とは、SQLで複数の条件からレコードを抽出する際に便利な書き方。

WHERE 1 = 1は常に真になるため、1 = 1自体には何も意味はない。
しかし、複数のWHEREによる条件が追加される可能性がある場合、条件式にWHEREを書く必要がなくなり、ANDだけを追加すればよくなるため、プログラムが書きやすくなる。

下記のようなidとnameがあるuserテーブルがある場合を想定して、idとnameの条件式の有り無しよって作成されるSQLがどう変わるか確認

id name
1 hoge
2 fuga
3 piyo

WHERE 1 = 1 を使わない場合

public string GetSQL(int id, string name){

    var sql = "SELECT * FROM user" 

    if(id != ""){//idの条件が有る
        sql += $"WHERE id = {id}"
    }

    if(id == "" && name != ""){//idの条件が無く、nameの条件が有る
        sql += $"WHERE name = {name}"
    }else if(id != "" && name != ""){//idの条件が有り、nameの条件が有る
        sql += $"AND name = {name}"
    }

    return sql;
}

WHERE 1 = 1 を使う場合

public string GetSQL(int id, string name){

    var sql = "SELECT * FROM user WHERE 1 = 1" 

    if(id != ""){//idの条件が有る
        sql += $"AND id = {id}"
    }

    if(name != ""){//nameの条件がある
        sql += $"AND name = {name}"
    }

    return sql;
}

WHERE 1 = 1を使った方が条件式がある場合は、すべてANDで繋げられるため、処理が書きやすくなる。

まとめ

SQLで複数の条件式が追加される可能性がある場合、WHERE 1 = 1 をつけることで条件式の2番目以降がWHEREなのかANDなのかを判定する処理が不要になる。

参考