문제

제목은 자명합니다.2.0.0 을 사용하여 불필요한 자세한 내용을 피하고 싶습니다.이 형식은 적절하게 이름이 지정 되었기 때문에 결합 할 열의 이름을 명시 적으로 지정하는 형식입니다. NATURAL JOIN 표준의 일부입니다.언급 할 필요가 없을 것입니다,위키 백과 자체는 심지어 말한다 "자연 결합은 논리적이고 관계적인 대응이기 때문에 가장 중요한 연산자 중 하나라고 할 수 있습니다."

나는 상기 충분히 명확해야한다고 생각,하지만 그냥 그렇지 않은 경우,읽어.각 부품의 공급 업체 이름과 부품 번호를 알고 싶다고 가정 해보십시오.적절한 케이스 클래스가 표시되지 않는다고 가정:

class Suppliers(tag: Tag) extends Table[Supplier](tag, "suppliers") {
  def snum  = column[String]("snum")
  def sname = column[String]("sname")
  def * = (snum, sname) <> (Supplier.tupled, Supplier.unapply _)
}

class Shipments(tag: Tag) extends Table[Shipment](tag, "shipments") {
  def snum  = column[String]("snum")
  def pnum = column[String]("pnum")
  def * = (snum, pnum) <> (Shipment.tupled, Shipment.unapply _)
}

val suppliers = TableQuery[Suppliers]
val shipments = TableQuery[Shipments]

두 테이블 모두 snum 내가 가입 할 열은 다음과 같이 보인다

( suppliers join shipments ).run

내 데이터로 베를 반다고,만 난 실 시도 INNER JOIN,조인 조건이 없기 때문에(런타임에)실패합니다.

내가 할 수 있다는 걸 알아

suppliers.flatMap( s => shipments filter (sp => sp.snum === s.snum) map (sp => (s.sname, sp.pnum)) )

그러나 이 질문의 명확성을 위해 생략 한 모든 열의 이름이 없어도 단순히 입력하는 것보다 훨씬 더 많은 입력(및 교정)이 있습니다

suppliers join shipments

또는 그 문제에 대해

SELECT * FROM suppliers NATURAL JOIN shipments;

스칼라 코드가 스칼라 코드보다 더 지저분하다면,나는 정말로 사물에 의문을 제기하기 시작한다.매끄러운 자연 조인을 할 수있는 방법은 단순히 없다?

도움이 되었습니까?

해결책

현재 슬릭에 의해 지원되지 않습니다.티켓 또는 풀 요청을 제출하십시오.

쿼리 코드의 가독성을 향상시키기 위해 조인 조건을 재사용 가능한 값으로 넣을 수 있습니다.또는 전체 조인을 쿼리[공급 업체,공급 업체]의 함수 또는 메소드 확장에 넣을 수 있습니다.

또는 여기에 설명 된 자동 결합 패턴(기본적으로 조인 조건을 암시적으로 만드는)을 볼 수 있습니다 http://slick.typesafe.com/docs/#20130612_slick_vs_orm_scaladays_2013 그리고 여기에 구현 https://github.com/cvogt/play-slick/blob/scaladays2013/samples/computer-database/app/util/autojoin.scala

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top