일반적으로 쿼리 문에 조건이 필요하지 않으면 WHERE
절을 사용하지 않습니다 . 그러나 WHERE 1
다른 조건이없는 곳에서도 많은 곳에서 조항이 사용되는 것을 봅니다 .
- 왜 이렇게됩니까?
- 실행 시간에 특별한 이점이 있습니까?
- 다른 기능을 사용할 수 있습니까?
- 사용
WHERE 1=1
이 이것과 비슷합니까?
일반적으로 쿼리 문에 조건이 필요하지 않으면 WHERE
절을 사용하지 않습니다 . 그러나 WHERE 1
다른 조건이없는 곳에서도 많은 곳에서 조항이 사용되는 것을 봅니다 .
WHERE 1=1
이 이것과 비슷합니까?답변:
기본적으로 프로그래머 편의를위한 것입니다. 이후에 추가 조건을 추가 할 수 AND...
있고 실행 시간에 영향을 미치지 않기 때문입니다.
Stackoverflow에 대한 다음 링크를 확인하십시오.
즉 주 WHERE 1
와 동일하다 WHERE 1=1
; 둘 다 의미 WHERE TRUE
하지만 전자는 많은 데이터베이스 관리 시스템에서 실제로 부울하지 않은 것으로 거부됩니다.
내 주요 용도는 쿼리 개발 중에 물건을 주석 처리하는 것이 더 쉽다는 것입니다. 나는 납 ,
's 및 and
의 :
SELECT
A
-- ,B
,C
,D
-- ,E
FROM TABLE
WHERE 1=1
-- and B='This'
and C='That'
-- and D is not null
또한 프로그래밍 방식으로 물건을 끝까지 쉽게 붙일 수 있습니다.
this = "SELECT * "
this += "FROM TABLE "
this += "WHERE 1=1 "
if user chooses option a then this += "and A is not null "
if user chooses option b then this += "and B is not null "
if user chooses option b then this += "and C is not null "
if user chooses option b then this += "and D is not null "
그렇지 않으면 첫 번째 옵션을 한정해야하며 다음 각 옵션에서 이전 옵션을 확인해야합니다. 사용자가 이전 예에서 옵션 D 만 선택한 경우 어떻게됩니까? 그런 if A, B and C aren't chosen
다음 WHERE
else use을 사용해야 and
합니다. 로 =
시작시, 당신은 단지 문장의 끝으로 예선을 때리고 있습니다.
code
SSMS 또는 유사한 쿼리 도구의 첫 번째 블록과 유사하게 작성 합니다. 최종 사용자를 위해 Crystal Reports와 같은보고 도구에 넣기 전에 데이터 세트를 조사하고 올바른 결과를 얻습니다. 두 번째 블록은 내 사람들이 원시 SQL 액세스에 대해 너무 많이 다루지 않았기 때문에 다른 사람들이 본 것입니다. 나는 다른 사람들과 비슷한 코드를 골라서 추론을 이해할 수 있습니다. (코드는 VB, C # 및 PHP에 있습니다).
PostgreSQL을 위해 C ++ / C에서 많은 사용자 정의 함수를 프로그래밍하고 있었는데 대기업 (10K 이상)의 다른 사람들이 사용했습니다. 내 함수에는 선택적 where
매개 변수가 있습니다. 값이 없으면 절이 사용되지 않습니다. 이것은 명시 적으로 문서화되었습니다. 불행히도 아무도이 기능을 사용하지 않았으며 모든 사람들이 where 1=1
절을 제공하는 곳에서만 사용했습니다 . 이론적으로 이것은 현명하지 않은 것처럼 보이지만 실제로 모든 쿼리 최적화 프로그램은 이러한 유형의 문을 배제합니다. 그리고 10K 명을 교육하는 것은 어렵습니다.
WHERE 1=1; DROP TABLE CUSTOMERS
없습니까?
런타임에 쿼리를 구성해야하고 짧거나 길 수있는 경우와 같은 상황에서 'where 1 = 1 AND'
string criteria =string.Empty;
if (txtc1.Text != "")
{
criteria += "criteria1=" + "'" + txtc1.Text + "' ";
}
if (txtc2.Text != "")
{
criteria += "OR criteria2=" + "'" + txtc2.Text + "' ";
}
if (ddl1.SelectedItem.Text != "")
{
criteria += "OR criteria3=" + "'" + ddl1.SelectedItem.Text + "' ";
} if (ddl2.SelectedItem.Text != "")
{
criteria += "OR criteria4=" + "'" + ddl2.SelectedItem.Text + "' ";
}
if (ddl3.SelectedItem.Text != "")
{
criteria += "OR criteria5=" + "'" + ddl3.SelectedItem.Text + "' ";
}
if (ddl4.SelectedItem.Text != "")
{
criteria += "OR criteria6=" + "'" + ddl4.SelectedItem.Text + "' ";
}
if (txtc1.Text == "")
{
//criteria = criteria.Substring(2);
criteria = criteria.Substring(2,criteria.Length-3);
}
if (criteria != string.Empty)
{
criteria = "where 1=1 AND " + criteria;
//Response.Write("<script>alert('query constructed by you is : '+'" +criteria+ "');</script>");
Response.Write(criteria);
}
일을 더 쉽게