2013-02-21 19 views
40

Mogę obecnie zapytać o połączenie dwóch tabel na równość klucza obcego/podstawowego w następujący sposób.SQL Inner dołączyć więcej niż dwie tabele

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

Chciałbym rozszerzyć to do wielu tabel (wszystkie z tymi samymi kluczami obcymi). Próbuję następujący kod, który nie zwraca niczego. Czy ktoś może wskazać, co robię źle?

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

Odpowiedz

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

Czy ktoś mógłby mi pomóc w tej sprawie? Czy jest to to samo, co 'WYBIERZ * Z tabeli1 WEJŚCIE WEWNĘTRZNE tabela2 WEJŚCIE WEWNĘTRZNE table3 ON table1.primaryKey = table2.table1Id AND table1.primaryKey = table3.table1Id'? –

0

right syntax jest jak:

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

Orthe ostatnia linia łącząca table3 na tabela1 jak:

ON table3.ForeignKey= table1.PrimaryKey 
16

Oto ogólna składnia zapytań SQL do przyłączenia się trzy lub więcej stół. To zapytanie SQL powinno działać we wszystkich głównych bazach relacji, np. MySQL Oracle Microsoft SQLServer Sybase PostgreSQL:

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

Najpierw przyłączenia tabeli 1 i tabeli 2, która wytworzenia tymczasowej tabeli z połączonych danych Tabela 1 i tabeli2, który jest następnie łączone z table3. Ta formuła może zostać rozszerzona na więcej niż 3 tablice na N tabel, Musisz tylko upewnić się, że zapytanie SQL powinno mieć instrukcję N-1 join, aby połączyć tabele N. jak przy łączeniu dwóch tabel, wymagamy instrukcji 1 join i do dołączenia 3 tabel potrzebujemy 2 instrukcji join.

+1

Najlepsza odpowiedź, jaką mogłem znaleźć. Świetny przykład konstrukcji. – 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

Możliwym rozwiązaniem:

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

Spróbuj Oto składnia jest

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

na przykład: 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

Piękna i bezużyteczna duplikat odpowiedzi ... – amdev

+0

To jest dobre ...robi ogólną wersję i nie jest specyficzna dla tabeli. – Si8

0

Proszę wybrać wewnętrzny dołączyć do więcej niż 2 tabela tutaj

Oto 4 Nazwa tabeli, jak

  1. Zamówienia
  2. Klienci
  3. studenckie
  4. wykładowca

Więc kod SQL będzie:

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

wypróbuj tę metodę podaną poniżej, zmodyfikuj zgodnie z potrzebami.

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

jest to przykład łączenia 4 tabel w mysql/sql ... mam nadzieję, że otrzymasz poprawny wynik .. dziękuję !!! –

Powiązane problemy