sql 쿼리 질문이요

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
sql 쿼리 질문이요

QA

sql 쿼리 질문이요

본문

안녕하세요. 로직을 수정하고 있는데요

필드가 2개가 있어요 두개는 임시로 추가한 필드에요 it_option1, it_option2로 했는데

 

아래 테이블처럼 있다고 가정하에 설명드려요

it_option1 it_option2
1. -0.5 ;999 공백
공백 2. -0.75 ;999

 

이렇게 번갈아서 있다고 치면 만약에 it_option1에 값이 없으면 it_option2 로 찾아야하는데

이게 좀 잘 안되네요.. 쿼리를 어떻게 짜야될까요? where 절에서 도무지 어떻게 할지 모르겠어요

이게 post 변수로 받아와서 두개 필드를 조회를 하고싶어요 

이 질문에 댓글 쓰기 :

답변 4


it_option1 = '${post_var}' OR it_option2 = '${post_var}'

음.. 우선 두서 없이 질문 드려 죄송합니다~ 급해서.. 단서를 이렇게 남겼는데요
저도 or 절로 해서 구분해서 했다가 제대로 조회를 하는데 원하는 결과가 안나와서요

가상테이블을 만들고 LIKE 조회를 해봤을때 단순하게 기대하는 결과가 나옵니다.
다른 추가 영향을 받는 부분이 없는지 확인이 필요한것 같습니다.


SELECT * 
FROM (
    SELECT '1. -0.5 ;999' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT '1. -0.5 ;222' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT NULL           it_option1, '2. -0.75 ;999' it_option2 FROM DUAL
) vtbl 
WHERE it_option1 LIKE '%999%' OR it_option2 LIKE '%999%'
;
/*
+--------------+---------------+
| it_option1   | it_option2    |
+--------------+---------------+
| 1. -0.5 ;999 |               |
| NULL         | 2. -0.75 ;999 |
+--------------+---------------+
2 rows in set (0.00 sec)
*/

SELECT * 
FROM (
    SELECT '1. -0.5 ;999' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT '1. -0.5 ;222' it_option1, ''              it_option2 FROM DUAL UNION ALL
    SELECT NULL           it_option1, '2. -0.75 ;999' it_option2 FROM DUAL
) vtbl 
WHERE it_option1 LIKE '%999%' -- OR it_option2 LIKE '%999%'
;
/*
+--------------+------------+
| it_option1   | it_option2 |
+--------------+------------+
| 1. -0.5 ;999 |            |
+--------------+------------+
1 row in set (0.00 sec)
*/

UNION ALL 은 빠르게 쿼리동작 확인을 위해 생성하는 가상 테이블, 예제일 뿐입니다.
그렇지 않고서는 테이블을 CREATE 하고 데이터를 INSERT 한후 SELECT 를 해야 합니다.

- WHERE 절 없는 결과
- OR 없는 결과
- OR 있는 결과

위주로 조건 여부에 따른 결과를 확인해보면 좋을것 같습니다.

2943472801_1689069579.8112.png

 

우선 테이블이 다르게 제공한점 양해부탁드립니다... 금방 끝날줄 알고.. 아무튼 이거는 장바구니 테이블 이거든요

해당 필드는 임시로 추가가 된 상태이고 

여기서 $_post 변수로 it_opt7 와 it_opt8 일부 필드를 검색해서 

and it_opt7 like '{$_POST['it_opt7']}%' or it_opt8 like '{$_POST['it_opt8']}%'

했다가.. 이것도 아닌것 같아서...

and (it_opt7 = '{$_POST['it_opt7']}' or it_opt8 = '{$_POST['it_opt8']}')

로 했는데도 위에 그림에 있는 값이 조회 결과가 안나와서요..

위에 사진 보면 이미 두개 필드에 값이 있는데 이거를 두 $_post 값으로 검색을 했는데 결과가 없다고만 나옵니다...

조금이라도 도움 되어으면 하고 올려봅니다. 먼저, 다 아시겠지만 OR 연산자는 두 개 이상의 조건을 결합할 때 사용하는 연산자입니다. OR 연산자를 사용하면 두 개 이상의 조건 중 하나라도 참이면 전체 조건이 참이 됩니다.

따라서, it_option1 필드와 it_option2 필드 중 하나라도 값이 있으면 조회하고 싶다면 다음과 같이 쿼리를 작성할 수 있죠.

SELECT * FROM 테이블명 WHERE it_option1 != '' OR it_option2 != '';

it_option1 필드가 공백이 아니거나(!= '') it_option2 필드가 공백이 아닌 경우(!= '') 해당 레코드를 조회합니다.

예를 들어, 아래  테이블이 있다고 가정하면...........

+------------+------------+
| it_option1 | it_option2 |
+------------+------------+
| -0.5 ;999  | -0.75 ;999 |
+------------+------------+

it_option1 필드에 값이 없는 경우(NULL 또는 공백), it_option2 필드에서 값을 조회하고 싶다면 다음과 같은 쿼리.

SELECT * FROM 테이블명 WHERE it_option1 = '' OR it_option1 IS NULL OR it_option2 != '';

위에 쿼리는 it_option1 필드가 공백('') 또는 NULL인 경우(IS NULL) 또는 it_option2 필드가 공백이 아닌 경우(!= '') 해당 레코드를 이런 식으로 조회 됩니다.

....여기서 $_post 변수로 it_opt7 와 it_opt8 일부 필드를 검색해서
and it_opt7 like '{$_POST['it_opt7']}%' or it_opt8 like '{$_POST['it_opt8']}%'
했다가..
==
이 query 문을 출력( echo)해서
이상이 없는지 확인해 보세요

답변을 작성하시기 전에 로그인 해주세요.
전체 4,572
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT