我有 2 个相似的表
- 人
- 地址
1.人员表
@Entity(tableName = "person_table")
data class Person(
@PrimaryKey
var id:Int? = 0,
var name:String? = "",
@ColumnInfo(name = "email")
var email:String? = "" //EMAIL
)
2。地址表
@Entity(
foreignKeys = [ForeignKey(
entity = Person::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("personId"),
onDelete = CASCADE
)],
tableName = "address_table"
)
data class Address(
@PrimaryKey
var id:Int? = 0,
var name:String? = "" ,
@ColumnInfo(name = "phoneNumber")
var phoneNo:String? = "" , //PHONE NO
var personId:Int? = 0
)
我想写一个inner join query来获得person的email和电话号码的地址表格
所以我做了一个新表
data class PersonAddress(
@ColumnInfo(name = "PhNumber") var phoneNo: String? = "" ,
@ColumnInfo(name = "Email") var email: String? = ""
)
并在 DAO 中编写此查询
@Dao
interface AddressDAO {
@Query("SELECT address_table.phoneNumber as PhNumber, person_table.email as"
+ "Email FROM address_table" +
"INNER JOIN person_table ON person_table.id = address_table.personId"
+ "WHERE person_table.id =:personId")
fun findAddressesForPerson(personId: Int): LiveData<List<PersonAddress>>
}
我成功地得到了结果:)