2013-02-21 40 views
40

Tôi hiện có thể truy vấn tham gia của hai bảng về sự bình đẳng của khóa ngoại/chính theo cách sau.SQL Inner tham gia nhiều hơn hai bảng

$result = mysql_query("SELECT * FROM `table1` 
         INNER JOIN 
         `table2` ON table1.primaryKey=table2.table1Id"); 

Tôi muốn mở rộng bảng này thành nhiều bảng (tất cả đều có cùng khóa ngoại). Tôi đang thử đoạn mã sau không trả lại bất cứ thứ gì. Bất cứ ai có thể chỉ ra những gì tôi đang làm sai?

$result = mysql_query("SELECT * FROM `table1` 
         INNER JOIN `table2` 
         INNER JOIN table3 
         ON table1.primaryKey=table2.table1Id=table3.table1Id"); 

Trả lời

98
SELECT * 
FROM table1 INNER JOIN table2 ON 
    table1.primaryKey=table2.table1Id INNER JOIN 
    table3 ON table1.primaryKey=table3.table1Id 
+5

Ai đó có thể vui lòng giúp tôi về vấn đề này? Điều này giống như 'SELECT * FROM table1 INNER JOIN table2 INNER JOIN table3 ON table1.primaryKey = table2.table1Id AND table1.primaryKey = table3.table1Id'? –

0

Các right syntax giống như:

SELECT * FROM table1 INNER JOIN table2 ON table1.primaryKey = table2.ForeignKey 
INNER JOIN table3 ON table3.primaryKey = table2.ForeignKey 

Orthe dòng cuối cùng tham gia table3 trên table1 như:

ON table3.ForeignKey= table1.PrimaryKey 
16

Đây là một cú pháp truy vấn SQL chung để tham gia ba hoặc nhiều hơn bàn. Truy vấn SQL này sẽ hoạt động trong tất cả cơ sở dữ liệu quan hệ chính, ví dụ: MySQL, Oracle, Microsoft SQLServer, Sybase và PostgreSQL:

SELECT t1.col, t3.col FROM table1 join table2 ON table1.primarykey = table2.foreignkey 
            join table3 ON table2.primarykey = table3.foreignkey 

Đầu tiên chúng ta tham gia vào bảng 1 và bảng 2 mà tạo ra một bảng tạm thời với dữ liệu kết hợp từ table1 và table2, sau đó được nối với table3. Công thức này có thể được mở rộng cho hơn 3 bảng đến N bảng, Bạn chỉ cần đảm bảo rằng truy vấn SQL phải có câu lệnh nối N-1 để nối các bảng N. như để tham gia hai bảng, chúng tôi yêu cầu 1 câu lệnh nối và để tham gia 3 bảng, chúng ta cần 2 câu lệnh nối.

+1

Câu trả lời rõ ràng nhất mà tôi có thể tìm thấy. Ví dụ tuyệt vời về cấu trúc. – Parapluie

0
select * from Employee inner join [Order] 
On Employee.Employee_id=[Order].Employee_id 
inner join Book 
On Book.Book_id=[Order].Book_id 
inner join Book_Author 
On Book_Author.Book_id=Book.Book_id 
inner join Author 
On Book_Author.Author_id=Author.Author_id; 
1

Một giải pháp khả thi:

select Company.Company_Id,Company.Company_Name, 
    Invoice_Details.Invoice_No, Product_Details.Price 
from Company inner join Invoice_Details 
    on Company.Company_Id=Invoice_Details.Company_Id 
    inner join Product_Details 
     on Invoice_Details.Invoice_No= Product_Details.Invoice_No 
where Price='70000'; 
-1

Hãy thử điều này Đây cú pháp là

SELECT table1 .columnName, table3 .columnName 
    FROM table1 
    inner join table2 
      ON table1.primarykey = table2.foreignkey 
    inner join table3 
      ON table2.primarykey = table3.foreignkey 

ví dụ: Select SalesHeader.invoiceDate,ActualSales,DeptName,tblInvDepartment.DeptCode ,LocationCode from SalesDetail Inner Join SalesHeader on SalesDetail.InvoiceNo = SalesHeader.InvoiceNo inner join tblInvDepartment on tblInvDepartment.DeptCode = SalesDetail.DeptCode

+1

Câu trả lời trùng lặp đẹp và vô dụng ... – amdev

+0

Điều này thật tuyệt ...nó có phiên bản chung và không cụ thể cho một bảng. – Si8

0

Hãy tìm tham gia bên trong hơn 2 bảng ở đây

Dưới đây là 4 tên bảng như

  1. Orders
  2. Khách hàng
  3. Student
  4. Giảng

Vì vậy, các mã SQL sẽ là:

select o.orderid, c.customername, l.lname, s.studadd, s.studmarks 
from orders o 
    inner join customers c on o.customrid = c.customerid 
    inner join lecturer l on o.customrid = l.id 
    inner join student s on o.customrid=s.studmarks; 
0

thử phương pháp này được đưa ra dưới đây, sửa đổi cho phù hợp với nhu cầu của bạn.

SELECT 
    employment_status.staff_type, 
    COUNT(monthly_pay_register.age), 
    monthly_pay_register.BASIC_SALARY, 
    monthly_pay_register.TOTAL_MONTHLY_ALLOWANCES, 
    monthly_pay_register.MONTHLY_GROSS, 
    monthly_pay_register.TOTAL_MONTHLY_DEDUCTIONS, 
    monthly_pay_register.MONTHLY_PAY 
FROM 
    (monthly_pay_register INNER JOIN deduction_logs 
ON 
    monthly_pay_register.employee_info_employee_no = deduction_logs.employee_no) 
INNER JOIN 
    employment_status ON deduction_logs.employee_no = employment_status.employee_no 
WHERE 
    monthly_pay_register.`YEAR`=2017 
and 
    monthly_pay_register.`MONTH`='may' 
0
SELECT eb.n_EmpId, 
    em.s_EmpName, 
    deg.s_DesignationName, 
    dm.s_DeptName 
FROM tbl_EmployeeMaster em 
INNER JOIN tbl_DesignationMaster deg ON em.n_DesignationId=deg.n_DesignationId 
INNER JOIN tbl_DepartmentMaster dm ON dm.n_DeptId = em.n_DepartmentId 
INNER JOIN tbl_EmployeeBranch eb ON eb.n_BranchId = em.n_BranchId; 
+0

đây là ví dụ về việc tham gia của 4 bảng trong mysql/sql ... hy vọng bạn sẽ nhận được kết quả chính xác .. cảm ơn bạn !!! –