2013-02-21 36 views
40

Ich kann derzeit den Join von zwei Tabellen auf die Gleichheit eines Fremd-/Primärschlüssels in der folgenden Weise abfragen.SQL Inner Join mehr als zwei Tabellen

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

Ich möchte dies auf mehrere Tabellen (alle mit den gleichen Fremdschlüsseln) erweitern. Ich versuche den folgenden Code, der nichts zurückgibt. Kann jemand darauf hinweisen, was ich falsch mache?

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

Antwort

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

Kann jemand bitte mir auf diesem helfen? Ist das dasselbe wie 'SELECT * FROM table1 INNER JOIN Tabelle2 INNER JOIN Tabelle3 ON table1.primaryKey = table2.table1Id UND table1.primaryKey = table3.table1Id'? –

0

Die right syntax ist wie:

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

Orthe letzte Zeile wie table3 auf tabelle1 Beitritt:

ON table3.ForeignKey= table1.PrimaryKey 
16

Hier eine allgemeine SQL-Abfragesyntax ist drei oder mehr beitreten Tabelle. Diese SQL-Abfrage sollte in allen wichtigen Beziehungsdatenbanken funktionieren, z. MySQL, Oracle, Microsoft SQL Server, Sybase und PostgreSQL:

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

Wir schließen sich erste Tabelle 1 und Tabelle 2, die eine temporäre Tabelle mit kombinierten Daten aus Tabelle1 und Tabelle2 erzeugen, die table3 dann verbunden ist. Diese Formel kann für mehr als 3 Tabellen auf N Tabellen erweitert werden. Sie müssen nur sicherstellen, dass die SQL-Abfrage eine N-1 Join-Anweisung haben sollte, um N Tabellen zu verbinden. wie für das Verbinden von zwei Tabellen benötigen wir 1 Join-Anweisung und für das Verbinden von 3 Tabellen benötigen wir 2 Join-Anweisungen.

+1

Klarste Antwort, die ich finden konnte. Großes Beispiel für die Struktur. – 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

Eine mögliche Lösung:

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

die Sie interessieren hier die Syntax

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

zum Beispiel ist: 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

Schöne und nutzlose doppelte Antwort ... – amdev

+0

Das ist gut ...es tut die allgemeine Version und nicht spezifisch für eine Tabelle. – Si8

0

Bitte innen für mehr als 2 beitreten finden Tabelle hier

Hier gibt es 4 Tabellennamen wie

  1. Bestellungen
  2. Kunden
  3. Studenten
  4. Dozent

So ist der SQL-Code wäre:

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

versuchen Sie es mit dieser Methode, ändern Sie sie nach Ihren Bedürfnissen.

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

Dies ist das Beispiel der Verbindung von 4 Tabellen in mysql/sql ... hoffe, Sie werden das richtige Ergebnis erhalten..thank you !!! –