해결된 질문
작성
·
183
·
수정됨
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 없는 테이블) - > '사과'가 포함되지만 조인조건 때문에 사과와 당근을 매칭해서 불러오지 못함.
답변 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
안녕하세요, 선생님께서 답변주신대로 아래와같이 짜보았는데요
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를 해서 돌렸는데 아래와 같은 오류가 뜹니다ㅠ
원인을 알 수 있을까요?
네 선생님 ㅠ 제대로 되지 않은 문자열이 있어서 정규식 사용해서 모두 지워주고 다시 걸어주니 실행은 제대로 되는데 결과값이 아예 공백으로 떠서요
이럴 경우는 그냥 조인에서 문제가 있는걸까요? ㅠ
데이터가 어떤 형태인지 알 수 없어 정확한 답변이 힘들 것 같습니다. 제가 샘플 데이터를 받아 볼 수 있으면 좋을 텐데 그럴 수는 없을 것이라 생각되네요. name 열에 분명히 word 열의 문자열이 포함되어 있는 것 맞나요? 혹시 word 열에 name 열 문자열이 포함된 상황은 아니겠지요? 다시 한번 천천히 확인하셔서 작업해 보시기 바랍니다. 속히 해결되기를 기원합니다.
그런 오류가 발생했다면 word 열에 제대로 되지 않은 문자열이 있는것 같습니다. 오류 메세지에 의한다면 괄호가 포함된 문자열이 있는 것 같아요. 이 부분을 우선 확인해 보시기 바랍니다. 그리고 다음과 같은 형태로 해서 괄호를 정규식에서 특수 문자가 아닌 이스케이프 문자로 바꿔 보시기 바랍니다. 제가 정확한 데이터 상태를 모르기 때문에 해결책이 되지 않을 수도 있습니다.
regexp_like(name, replace(word, '(', '\('))