2013-09-04 20 views
5

Tôi có một truy vấn mẫu với slick như dưới đây:muốn biết cách tốt hơn để tham gia bàn với trơn

val query = 
    (for { 
    (company,loc) <- Company leftJoin Location on (_.locId === _.id) 
    (_,typeof) <- Company leftJoin Types on (_.typeId === _.id) 
    } yield (company, loc, typeof)) 

phải là một cách tốt hơn để làm nhiều tham gia?

Tôi đã thử các đề xuất trong multiple joins with slick nhưng dẫn đến lỗi.

+0

Bạn có ý nghĩa gì theo cách tốt hơn? Điều gì là xấu với điều này? –

+0

Tôi thấy truy vấn được tạo ra nó tạo ra nhiều truy vấn trên cùng một bảng Công ty hai lần và tham gia một lần với vị trí và một lần với loại. Thông thường với sql nó xảy ra trong một truy vấn nhiều tham gia. Bạn muốn biết nếu có điều gì đó sai trái với điều này. – dsr301

Trả lời

4

này đang làm việc tốt.

for { 
    ((company,geo),typeof) <- Company 
     leftJoin Location on (_.locId === _.id) 
     leftJoin Business_Levels on (_._1.typeId === _.id) 
} 
+0

Điều này trả lời câu hỏi của bạn, đúng không? Vui lòng gắn cờ nó làm câu trả lời trong trường hợp này :). Cám ơn – cvogt

2

Bạn có thể chuỗi join bình thường:

for { 
    (company, location, type) <- Company 
     leftJoin Location on (_.locId === _.id) 
     leftJoin Types on (_._1.typeId === _.id) 
} yield (company, location, type) 

Và bằng cách này, tôi khá chắc chắn từ type là một scala từ dành riêng.

EDIT: Đã thêm _.1 trên dòng 3 sau nhận xét của dsr301.

+0

yep, nhập là từ khóa, bài đăng không có tên gốc vì một số lý do. bất kỳ cách nào đã thay đổi nó. Nó cho tôi lỗi biên dịch với những gì bạn đã đề cập ở trên. ')' được mong đợi nhưng '.' tìm. tại (_.typeId === _.id) – dsr301

+0

Sau khi thay đổi truy vấn đầy đủ thành một lỗi nhận được lỗi này "typeId không phải là thành viên của (models.company.type, models.Location.type)". Tôi nghĩ rằng việc tham gia thứ hai được thực hiện trên bộ tuple được tạo từ lần tham gia đầu tiên – dsr301

+0

Đã chỉnh sửa câu trả lời của tôi. –

Các vấn đề liên quan