2012-04-21 35 views
12

Tôi đang sử dụng truy vấn này:Mysql truy vấn để tham gia ba bảng

SELECT a.sales_id, d.bus_title, a.cat_id 
FROM tbl_sales a 
INNER JOIN tb_category b ON a.cat_id = b.cat_id 
INNER JOIN tbl_business d ON d.bus_id = a.bus_id 

trong đó sản xuất kết quả này:

sales_id | bus_title  |cat_id 
----------|----------------|------------ 
1  | Business 1  | 6 
2  | Business 12 | 12 
3  | Business 123 | 25 

Tôi đã thay đổi cat_id trường vào một bảng mới có tên tb_sales_category trong đó có các lĩnh vực sales_category_id , sales_id, cat_id. Làm thế nào tôi có thể viết truy vấn mới bằng cách tham gia bảng này quá, để có được kết quả tương tự như trên?

Tôi là người mới vào cơ sở dữ liệu, cần trợ giúp. Cảm ơn trước

Trả lời

12

Hãy thử điều này:

SELECT a.sales_id, d.bus_title, s.cat_id 
FROM tbl_sales a 
INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id 
INNER JOIN tbl_business  d ON a.bus_id = d.bus_id 
INNER JOIN tb_category  b ON s.cat_id = b.cat_id 

Ý tưởng là khá đơn giản, trường đầu tiên trong bảng mới của bạn tb_sales_category đó là sales_category_id đang làm việc như một thay thế chìa khóa, nó không có gì để làm với quan hệ giữa hai bảng khác. Sau đó, chúng tôi đến hai lĩnh vực khác là sales_id, cat_id, những gì bạn nên lập bản đồ cho hai bên kia của mối quan hệ.

Bạn không thể Join tb_category b ON a.cat_id = b.cat_id trên giản đồ mới becouse chúng ta không còn có a.cat_id, và ở đây có vai trò bảng tb_sales_category mới, bằng cách chèn nó với hai bên ràng buộc, một với INNER JOIN tb_category b ON s.cat_id = b.cat_id và khác với INNER JOIN tb_sales_category s ON a.sales_id = s.sales_id chúng ta nên được thực hiện.

Hy vọng điều này có ý nghĩa.

+1

này quá hoạt động tốt, nhờ –

+1

cũng cảm ơn cho lời giải thích, điều này sẽ giúp đỡ tôi trong quá trình học tập tự tôi –

3

Tôi không phải là một fan hâm mộ lớn của bên tham gia vì vậy hãy thử này:

SELECT a.sales_id, a.cat_id, c.bus_title 
FROM tb_sales_category a, tb_sales b, tbl_business c 
WHERE a.sales_id = b.sales_id 
AND b.bus_id = c.bus_id 
+2

Tại sao trên trái đất don Bạn có thích INNER JOINs không? – liquorvicar

+0

@ gimg1 Cảm ơn, phục vụ mục đích –

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