web-dev-qa-db-fra.com

SQL interne rejoindre plus de deux tables

Je peux actuellement interroger la jointure de deux tables sur l'égalité d'une clé étrangère/primaire de la manière suivante.

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

J'aimerais étendre cela à plusieurs tables (toutes avec les mêmes clés étrangères). J'essaye le code suivant qui ne renvoie rien. Quelqu'un peut-il signaler ce que je fais mal?

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

Voici une syntaxe de requête SQL générale pour joindre trois tables ou plus. Cette requête SQL devrait fonctionner dans toutes les bases de données de relations principales, par exemple. MySQL, Oracle, Microsoft SQLServer, Sybase et PostgreSQL:

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

Nous joignons d’abord la table 1 et la table 2, qui produisent une table temporaire contenant les données combinées de table1 et table2, qui sont ensuite jointes à table3. Cette formule peut être étendue de plus de 3 tables à N tables. Vous devez simplement vous assurer que la requête SQL doit avoir une instruction de jointure N-1 pour pouvoir joindre N tables. comme pour joindre deux tables, nous avons besoin d'une déclaration de jointure et pour joindre trois tables, nous avons besoin de deux déclarations de jointure.

22
Harjeet Jadeja
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;
1
ravindra kalambe

Une solution possible:

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
vikramrajc

essayez cette méthode ci-dessous, modifiez-la en fonction de vos besoins.

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
Chibuzor
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;
0
Prio

La syntaxe right est comme:

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

Ou la dernière ligne rejoignant table3 sur table1 comme:

ON table3.ForeignKey= table1.PrimaryKey
0
CloudyMarble

Veuillez trouver une jointure interne pour plus de 2 tables ici

Voici 4 noms de table comme

  1. Ordres
  2. Les clients
  3. Étudiant
  4. Maître de conférences

Donc, le code SQL serait:

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
shivaji Lohar
select WucsName as WUCS_Name,Year,Tot_Households,Tot_Households,Tot_Male_Farmers  from tbl_Gender
INNER JOIN tblWUCS
ON tbl_Gender.WUCS_id =tblWUCS .WucsId 
INNER JOIN tblYear
ON tbl_Gender.YearID=tblYear.yearID

Il y a 3 tables 1. tbl_Gender 2. tblWUCS 3. tblYear 

0
subramanya4