【问题标题】:SQL Inner join more than two tablesSQL Inner 连接两个以上的表
【发布时间】:2013-02-06 08:21:48
【问题描述】:

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

 $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");

【问题讨论】:

    标签: sql inner-join


    【解决方案1】:
    SELECT * 
    FROM table1 
    INNER JOIN table2
          ON table1.primaryKey=table2.table1Id
    INNER JOIN table3
          ON table1.primaryKey=table3.table1Id
    

    【讨论】:

    • 有人可以帮我吗?这和SELECT * FROM table1 INNER JOIN table2 INNER JOIN table3 ON table1.primaryKey=table2.table1Id AND table1.primaryKey=table3.table1Id一样吗?
    【解决方案2】:

    这是连接三个或更多表的通用 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 个连接语句。

    【讨论】:

    • 我能找到的最明确的答案。结构的好例子。
    【解决方案3】:
    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;
    

    【讨论】:

    • 这是在 mysql/sql 中加入 4 个表的示例...希望您能得到正确的结果..谢谢!!!
    【解决方案4】:

    一个可能的解决方案:

    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 变化

    【讨论】:

      【解决方案5】:

      right syntax 是这样的:

      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
      

      【讨论】:

        【解决方案6】:
        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;
        

        【讨论】:

          【解决方案7】:

          请在此处查找超过 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;
          

          【讨论】:

            【解决方案8】:

            试试下面给出的这个方法,根据你的需要进行修改。

            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'
            

            【讨论】:

              【解决方案9】:
              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. tbl年

              【讨论】:

                【解决方案10】:

                试试这个这里的语法是

                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

                【讨论】:

                • 这很好......它是通用版本,而不是特定于表格。
                • 这不只是Harjeet的不同缩进的答案吗?
                猜你喜欢
                • 2021-12-26
                • 2015-05-16
                • 1970-01-01
                • 2015-02-24
                • 1970-01-01
                • 2012-04-07
                • 2012-02-28
                • 2012-05-01
                • 1970-01-01
                相关资源
                最近更新 更多