2016-09-24 4 views
0
내가

신속한 영역에서 조인 쿼리를 실행하는 방법은 무엇입니까?

table1) 
class student 
{ 
    name:String 
    classcode:Int 
} 

table2) 
class classcode 
{ 
    classcode:Int 
    name:String 
} 

데이터 예를 들어 쿼리에 가입 I 출력을 얻고 싶은

student: 

| name | classcode | 
| john | 001  | 
| Kim | 002  | 

classcode: 

| classcode | name  | 
| 001  | computer | 
| 002  | Math  | 

을 실행하려는

-? john,computer

어떻게 영역에서 쿼리를 실행할 수 있습니까?

+0

나는 약간의 노력을 제시하고 문제가있는 것을 설명해야한다고 생각한다. –

+1

나는 SQL 방식으로 생각하고 있다고 생각한다. 그래도 나쁘지 않습니다. 어쨌든 Realm은 일대일 및 일대 다 관계를 허용합니다. 그것을 확인하십시오 : https://realm.io/docs/swift/latest/#to-one-relationships'class' 클래스에'classcode' 속성을 만들 것을 제안합니다. 그러면 정보는'myStudent.class.name'처럼 간단하게 접근 가능합니다. – Orlando

+0

@Orlando : 감사합니다 !! class student {name : String, class : classcode} 맞습니까? 영역에 가입 데이터베이스가 없습니까? 오직 개체를 삽입하면 두 테이블 사이의 모든 데이터를 삽입 할 수 있습니까? – ttoggaiman

답변

1

영역은 객체 기반 데이터베이스이므로 쿼리에서 조인 개념이 적용되지 않습니다.

이 경우에는 student 클래스에 classcode 개체를 목록으로 설정하는 것이 적합합니다. 그래서 같이 :

class Class: Object { 
    dynamic var classCode = 0 
    dynamic var name = "" 
} 

class Student: Object { 
    dynamic var name = "" 
    let classes = List<Class>() 
} 

--- 

let realm = try! Realm() 

let computerClass = Class() 
computerClass.classCode = 1 
computerClass.name = "Computer" 

let newStudent = Student() 
newStudent.name = "John" 
newStudent.classes.append(computerClass) 

try! realm.write { 
    realm.add(computerClass) 
    realm.add(newStudent) 
} 

영역 List 객체는 Object 인스턴스의 복사본을 저장하지 않습니다; 테이블에 해당 Object에 대한 참조 만 저장합니다. 이렇게하면 조인 쿼리에서 예상하는 것과 동일한 종류의 설치를 복제합니다.

더 이상 설명이 필요하면 알려주세요. :)

+0

질문이 있습니다. 학생이 100 줄을 가지고 학생 한 명당 컴퓨터 클래스가 있습니다. 컴퓨터 클래스가 100 개 개체를 만들었습니까? 또는 컴퓨터 클래스가 모든 객체와 구별 되었습니까? – ttoggaiman

+0

각 '학생'이 가리키는 '클래스'개체에 따라 다릅니다. 'Class' 객체가 1 개만 존재하고 100 개의 'Student' 객체가 하나씩 만 있으면'Student' 객체는 100 개, 'Class' 객체는 1 개뿐입니다. :) – TiM

관련 문제