76

我目前可以通过以下方式查询两个表关于外键/主键是否相等的连接。

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

我想将此扩展到多个表(所有表都具有相同的外键)。我正在尝试以下不返回任何内容的代码。谁能指出我做错了什么?

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

10 回答 10

164
SELECT * 
FROM table1 
INNER JOIN table2
      ON table1.primaryKey=table2.table1Id
INNER JOIN table3
      ON table1.primaryKey=table3.table1Id
于 2013-02-21T05:13:28.467 回答
30

这是连接三个或更多表的通用 SQL 查询语法。此 SQL 查询应该适用于所有主要的关系数据库,例如 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

我们首先连接表 1 和表 2,它们生成一个临时表,其中包含来自 table1 和 table2 的组合数据,然后将其连接到 table3。这个公式可以扩展到超过3个表到N个表,你只需要确保SQL查询应该有N-1个连接语句才能连接N个表。就像连接两个表,我们需要 1 个连接语句,连接 3 个表,我们需要 2 个连接语句。

于 2013-02-21T05:24:10.690 回答
4
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;
于 2017-10-04T13:27:21.443 回答
1

一个可能的解决方案:

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='60000';

-- tets 变化

于 2013-12-17T14:15:33.877 回答
0

正确的语法如下:

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

或者在 table1 上加入 table3 的最后一行,如:

ON table3.ForeignKey= table1.PrimaryKey
于 2013-02-21T05:15:22.117 回答
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;
于 2013-10-18T02:11:45.170 回答
0

请在此处找到超过 2 个表的内部联接

这里有 4 个表名,比如

  1. 订单
  2. 顾客
  3. 学生
  4. 讲师

所以 SQL 代码将是:

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;
于 2014-12-10T10:34:17.740 回答
0

试试下面给出的这个方法,修改以满足您的需要。

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'
于 2017-08-25T14:04:22.330 回答
0
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

有 3 个表 1. tbl_Gender 2. tblWUCS 3. tblYear

于 2018-05-21T12:04:56.550 回答
-2

试试这个这里的语法是

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

例如: 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

于 2014-02-21T04:16:21.953 回答