데이터베이스 내의 레코드를 찾는 방법으로 반복 SQL 쿼리를하고 싶습니다. 테이블 이름은 길고 짜증나지만, 최소한의 예제로 이해하려고 노력할 것입니다. 나는 특정 특성을 가진 자동차를 찾기 위해 자동차 테이블을 찾고있다. 일반적으로,이 매우 쉬울 것이다 :테이블을 만들지 않고 SQL 반복?
SELECT vin FROM cars WHERE color = 'red' AND interior = 'cloth'
그러나, 사용자는 내가 그 특성을 기준으로 필터링하고 싶지 않은 경우에 '없음 기본 설정'옵션을 선택할 수 있습니다. 나는 사용자 입력에 의해 정의된다 @color
조건 하위 쿼리와 함께이 문제를 해결 얻을 :
SELECT vin FROM cars WHERE id IN
(SELECT CASE
WHEN @color = 'No Preference' THEN id
WHEN color = @color THEN id)
AND id IN
(SELECT CASE
WHEN @interior = 'No Preference' THEN id
WHEN interior = @interior THEN id)
아무것도 '어떤 성향'이없는 경우는 모든 레코드 세트를 선택하기 때문에 작동 (이 함께 I AND
다 같이 것이다 내가 어떤 것도 잃지 않도록).
그러나 많은 자동차 사양을 기준으로 필터링 할 지금 필요하며, 내가 함께이 하위 쿼리의 모든 다음 AND
을 쓸 수 있지만, 나는 똑똑한 방식으로 그것을 할 수있을 것 같은 느낌. 내가 이해하는 것으로부터, SQL의 반복은 쉽게 할 수 있습니다. <> 'No Preference'
인 모든 자동차 사양을 포함하는 테이블을 만들고 그 위에 반복합니다.
이것은 개발자 데이터베이스 액세스에서 올바르게 작동합니다. 그러나 계정 최종 사용자 자격 증명으로 작성된 쿼리에는 CREATE
또는 DROP
권한이 없으므로 테이블 생성은 여기에 대한 옵션이 아닙니다.
새 테이블을 만들지 않고 이러한 하위 쿼리를 반복적으로 수행 할 수있는 방법이 있습니까?
OR 할 수 있습니까? 그래서 WHERE (color = 'red'OR color = 'No Preference') AND interior = 'cloth' – stomo21
와우, 할 수있을 것 같아. 하위 쿼리 로직을 확실히 고려했습니다. 'OR'-ing ~ 70 문장은 여전히 조금은 보인다 (반복적으로하고 싶다) – Luigi
어떤 DBMS를 사용하고 있습니까? SQL Server/T-SQL과 비슷합니까? –