sql을 작성해야 하는 일이 생겼기 떄문에 join에 대해서 조금 자세히 알아볼 필요가 생겼는데

Left, Right, Inner, Outer, Cross의 차이가 뭔지 벤다이어그램만 보고서는 쉽게 이해가 되지 않았다.

 

Inner Join이 내가 생각한 기존 방식의 join 같지만

벤다이어 그램을 보면 두개가 겹친 부분만 포함되는 특이한 모습을 하고 있고

left, right join을 볼 경우 왼쪽, 오른쪽에 쏠려있는 모습을 볼 수 있었다.

 

join에 대해 어느정도 이해를 하고 BigQuery를 사용해서 쿼리를 만들 수 있었지만

주어진 조건이 제대로 되지 않아서 최종적으로 사용할 수는 없었고

정의되지 않은 부분들에 대해 문의사항을 남기고 다른 쿼리 생성으로 넘어갔다.

 

200줄이 넘는 쿼리라도 틀이 있으면 조금 더 편하게 진행할 수 있지만

다른 쿼리는 틀도 없었기 때문에 기준 조건(시간, 횟수, boolean 등)을 모르기 때문에

쿼리에 들어가야 하는 테이블 및 필드를 정리하다가 수정요청이 와서 마무리했다.

 

수정요청사항은 다른 사람이 작성한 파일 삭제를 하고 싶다는 내용이었는데

일단 세일즈포스 내부에서 권한 부여로는 해결이 불가능하다고 결론이 났고

modify all 또는 관리자권한인 경우에만 권한 부여로 문제를 해결할 수 있었고

비정상적인 방식이라면 roll로 마구 엮어버리는건데

오히려 이건 다른 개체들까지 엮여버릴 수 있기 때문에

차라리 해당 개체만 modify all이 그나마 정상적이었다.

 

비정상 방식을 무시하고 진행해보니 Owner를 변경할 경우

파일 삭제 권한이 생긴다는 사실을 알 수 있었기 때문에

flow를 통해 해당 레코드와 연관된 link를 entity를 통해 가져오고

해당 entity에 있는 DocumentId를 통해서 ContentDocument를 가져온 다음

해당 ContentDocument의 owner를 변경하려고 하다가 8시 30분쯤 퇴근했다.

 

 

(1).백준 1871번 좋은 자동차 번호판은 자기 멋대로 특이한 규칙을 정해놓고 

해당 규칙에서 나온 값이 100 이하인 경우 nice 

100보다 큰 경우 not nice를 출력해야 하는 문제였다.

 

해당 조건대로 계산하기 위해 charCodeAt()을 사용해서 숫자값으로 변경해줬고

A는 0이었기 때문에 -65 처리를 통해 A~Z까지의 숫자가 0~25가 될 수 있게 만들었다.

 

나머지는 원하는 조건대로 값을 곱하고 더하고 뺀 다음 100 이하인지 아닌지를 if문으로 확인해 해결했다.

const input = `2
ABC-0123
AAA-9999`.split('\n')

const result = []

for(let i = 1 ; i < input.length ; i++){
    let [a,b,c,q,w,e,r] = input[i].split('-').join('').split('')
    if(Math.abs((a.charCodeAt()-65)*26*26 + (b.charCodeAt()-65)*26 + c.charCodeAt()-65 - (q+w+e+r)) <= 100){
        result.push('nice')
    }
    else{
        result.push('not nice')
    }
}

console.log(result.join('\n'))

'회고' 카테고리의 다른 글

[개발일지] - 188  (0) 2024.01.04
[개발일지] - 187  (0) 2024.01.03
[개발일지] - 185(신정)  (0) 2024.01.01
[개발일지] - 184(주말)  (0) 2023.12.31
[개발일지] - 183(주말)  (0) 2023.12.30

+ Recent posts