글

라벨이 Join인 게시물 표시

SQL Postgres의 다중 tag검색하기 Many to Many

이미지
  위 사진처럼 커피(coffees)와 향(flavor) 테이블 사이에 Join 테이블이 있습니다. 해당 Join테이블은 한개의 row에 하나의 flavor만 조회가 가능합니다. 만약 2개 이상의 향이 있는 커피를 찾는다면 아래 쿼리문을 사용해야 합니다. -- SQL Query1  SELECT DISTINCT title   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'; Query1을 사용하면 Join, OR문을 이용하여 choco 또는 banana가 있는 레코드를 조회합니다. 문제는 choco는 있지만 banana가 없거나 반대의 경우도 모두 조회를 한다는 것입니다. 이를 위해서 GROUP BY를 사용하며 해당 갯수를 count해서 조회해야 합니다. -- SQL Query2   SELECT DISTINCT title, COUNT(*) as count   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'  GROUP BY title  HAVING flavor.count = 2; Query2를 사용하면 구할려고 하는 해당 title을 조회할수 있습니다.

NestJS TypeORM의 Many to Many 구현 4- Join Table에 CASCADE적용하기(부모Record삭제시 자식 Record도 동시 삭제)

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 3- Join Table 구성 안녕하세요. 이번에는 'CASCADE'를 JoinTable에 적용해 보도록 하겠습니다.  사진1) userId 삭제할때 에러 위 SQL문에서 user 테이블의 id 2인 레코드를 지울려면 해당 JoinTable의 연관된 Record를 먼저 삭제를 해야 합니다. 이것을 삭제하고 진행을 할수 있지만 무척 번거로워 지겠죠.   좋은 방법중 하나는 user의 Record를 삭제하면 JoinTable의 연관된 Record도 자동으로 지워지는 것입니다. 그것이 CASCADE입니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => Us...

NestJS TypeORM의 Many to Many 구현 3- Join Table 구성

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 2- 관계형 구성 및 User, Book의 CRUD구현  이제 Join Table을 이용하여 관계를 만들도록 하겠습니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => User , ( user ) => user . id ) user : User ; @ ManyToOne (() => Book , ( book ) => book . id ) book : Book ; }   위 Entity는 user와 book을 연결해 주는 JoinTable 입니다. 다만 그대로 연결하는 것이 아닌 리뷰도 작성하여 저장할수 있습니다. import ...