inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

장래쌤과 함께하는 쉽고 재미있는 SQL 이야기

USING 조인 질문드립니다.

해결된 질문

312

hunter

작성한 질문수 18

0

안녕하세요 MySQL 사용하고있는데요

조인하려는 테이블이 PK가 없는 단일 값인데요

메인 select 절에 있는 컬럼이 pk 테이블에 있는 단일컬럼에 포함되는 값이 있는지

regexp_like 함수로 확인하고싶은데요

pk값이 없다보니 join 을 어떻게 할지.. 모르겠습니다

using 으로 연결해보려 했는데 (natural join은 지원안됨) 컬럼절에 regexp_like (a.테이블 컬럼, pk 없는 테이블 컬럼) 이렇게 조건을 거니까 에러가 떠서요..

 

방법이 있을까요?

 

요약 : left join으로 pk 테이블이 없는 단일 컬럼과 같다는 조건으로 연결 시, regexp_like 를 사용해도 똑같은 값만 불러오는 에러가 발생

ex. pk 테이블이 없는 컬럼에 '사과' 라는 단어가 있다고 가정,

'사과와당근' 이라는 메인 테이블의 컬럼값이 pk 테이블의 '사과' 단어가 매칭되는지 아래 조건으로 걸면 null 값으로 반환.

regexp_like('사과와당근', pk 없는 테이블) - > '사과'가 포함되지만 조인조건 때문에 사과와 당근을 매칭해서 불러오지 못함.

sql mysql oracle dbms/rdbms mssql

답변 2

1

장래쌤

안녕하세요?

제가 질문을 제대로 이해있는지 모르겠네요.

다음과 같이 예제를 만들어 봤습니다.

혹시 원하시는 것이 아니면 다시 질문해 주세요.

 -- 테이블 만들기
CREATE TABLE fruits (
	num int,
	fruit_list varchar(100)
);
CREATE TABLE fruit_price (
	fruit_name varchar(100),
	price int
);

-- 데이터 추가
INSERT INTO fruits VALUES(1, '사과와당근');
INSERT INTO fruits VALUES(2, '배와딸기');
INSERT INTO fruits VALUES(3, '수박과도마토');

INSERT INTO fruit_price VALUES('사과', 8000);
INSERT INTO fruit_price VALUES('딸기', 2000);
INSERT INTO fruit_price VALUES('당근', 1500);
INSERT INTO fruit_price VALUES('파인애플', 7000);

-- 쿼리
SELECT f1.num, f1.fruit_list, f2.fruit_name, f2.price
	FROM fruits AS f1
    INNER JOIN fruit_price AS f2 ON REGEXP_LIKE(f1.fruit_list, f2.fruit_name);
    
/*
'1', '사과와당근', '사과', '8000'
'2', '배와딸기', '딸기', '2000'
'1', '사과와당근', '당근', '1500'
*/

질문해 주셔서 감사합니다~

0

hunter

안녕하세요, 선생님께서 답변주신대로 아래와같이 짜보았는데요

 

     

select optionid, json_extract_scalar(name,'$.ko_KR') optionitem, word

from option_items oi

inner join temp f on regexp_like(name,word)

 

이렇게 그대로 조인문에 regexp_like를 해서 돌렸는데 아래와 같은 오류가 뜹니다ㅠ

원인을 알 수 있을까요?image

1

장래쌤

그런 오류가 발생했다면 word 열에 제대로 되지 않은 문자열이 있는것 같습니다. 오류 메세지에 의한다면 괄호가 포함된 문자열이 있는 것 같아요. 이 부분을 우선 확인해 보시기 바랍니다. 그리고 다음과 같은 형태로 해서 괄호를 정규식에서 특수 문자가 아닌 이스케이프 문자로 바꿔 보시기 바랍니다. 제가 정확한 데이터 상태를 모르기 때문에 해결책이 되지 않을 수도 있습니다.

regexp_like(name, replace(word, '(', '\('))

0

hunter

네 선생님 ㅠ 제대로 되지 않은 문자열이 있어서 정규식 사용해서 모두 지워주고 다시 걸어주니 실행은 제대로 되는데 결과값이 아예 공백으로 떠서요

이럴 경우는 그냥 조인에서 문제가 있는걸까요? ㅠ

0

장래쌤

데이터가 어떤 형태인지 알 수 없어 정확한 답변이 힘들 것 같습니다. 제가 샘플 데이터를 받아 볼 수 있으면 좋을 텐데 그럴 수는 없을 것이라 생각되네요. name 열에 분명히 word 열의 문자열이 포함되어 있는 것 맞나요? 혹시 word 열에 name 열 문자열이 포함된 상황은 아니겠지요? 다시 한번 천천히 확인하셔서 작업해 보시기 바랍니다. 속히 해결되기를 기원합니다.

간단한 오타 제보입니다.

0

3

0

큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.

0

19

1

실제 FK제약조건을 설정하지 않는이유

0

20

1

create view

0

121

2

json 배열 파싱

0

185

2

insert into 구문

0

171

2

PDF 자료 문의

0

140

2

집계 연산자에 대한 질문

0

125

1

array_agg 배열 해제

0

196

2

null 수강 관련 문의

0

108

1

테이블 생성 후 조건 수정 방법

0

265

2

주차별 데이터에서 전 주 데이터 가져오기

0

180

1

여러 컬럼 중 null값이 아닌 값 가져오기

0

428

1

누적 백분위 구하기 질문

0

731

1

Join 질문

0

174

1

pdf 문의드립니다

1

188

1

regexp like 에 특정 특수기호 포함

1

356

1

컬럼 안 공백 문자열 제외

1

226

1

JOIN함수 질문입니다.

1

261

1

ELT 함수와 FIELD함수 질문입니다.

0

313

1

뷰 변경 질문입니다.

0

335

2

[질문] 3. '다양한 데이터 집계 _ 심각할 수 있는 집계 함수와 NULL값의 관계' 수업 내용 질문

0

224

1

대문자 질문입니다!

0

206

1

mysql 설치 오류로 학습 불가

0

234

1