【问题标题】:select inner join 4 tables选择内连接 4 个表
【发布时间】:2013-02-11 05:26:05
【问题描述】:

所以我想从与其他 3 个表互连的 4 号表中获取特定数据 用户将选择 $faid 并打印所需的数据

表 1 (dbo.FAID)
FAID(pk)
PCID(fk)
用户 ID(fk)

表 2 (dbo.users)
用户 ID(PK)
员工姓名

表 3(dbo.SubDeptTransfer)
TransferID(pk)
用户 ID(fk)
子部门ID(fk)

表 4(子部门)
子部门 ID(PK)
部门ID(fk)

表 5(部门)
部门ID(PK)
部门

<?php
$faidf=$_POST['faidf'];
ini_set("display_errors","on");
$conn = new COM("ADODB.Connection");
   try {
   $myServer = "WTCPHFILESRV\WTCPHINV";
   $myUser = "sa";
   $myPass = "P@ssw0rd";
   $myDB = "wtcphitinventory";   
   $connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;
   $conn->open($connStr); 
         if (! $conn) {
            throw new Exception("Could not connect!");
        }
   }

   catch (Exception $e) {
      echo "Error (File:): ".$e->getMessage()."<br>";
   }
if (!$conn)
  {exit("Connection Failed: " . $conn);}
  echo "<center>";
   echo "<table border='0' width ='100%' style='margin-left:90px'><tr><th></th><th></th></tr>";
   $sql_exp = "SELECT  e.Department
FROM    dbo.FA_PC a
        INNER JOIN dbo.users b
        on a.UserID = b.UserID
        INNER JOIN dbo.SubDeptTransfer c
            ON a.UserID = c.UserID  
        INNER JOIN dbo.SubDept d
            ON a.SubDeptID = d.SubDeptID
        INNER JOIN dbo.department e
            ON a.DeptID = e.DeptID
WHERE   a.FAID = $faidf";    
   $rs = $conn->Execute($sql_exp);  

    echo "<tr><td>".$rs->Fields("Department")."</tr></td>";
       $rs->Close();   

?>

我所能得到的只是“无效的列名'SubDeptID”,尽管我认为我的选择语句搞砸了,但我可以确定列名是正确的

FAID->用户->subdepttransfer->subdept->部门

内部连接的数量是否存在冲突,或者它不能执行超过 3 个表?如果是,有什么方法可以连接这 5 个表?

【问题讨论】:

  • 您是否在数据库中的表之间创建了关系
  • 是的,它与它们的外键相互关联
  • 因为您使用的是 sql-server,我建议您在 sql-server 中试用设计查询编辑器。这可以帮助您进行查询
  • 我认为ON a.SubDeptID = d.SubDeptID 应该是ON c.SubDeptID = d.SubDeptIDON a.DeptID = e.DeptID 应该是ON d.DeptID = e.DeptID
  • 在您的问题 table1 中称为 dbo.FAID 在您的选择语句中它是 dbo.FA_PC。哪一个是正确的?

标签: php sql-server select datatable


【解决方案1】:

AFAIK 没有限制,至少 5 个表应该不是问题。在您的情况下,SQL 语句中存在拼写错误。您使用别名 a,但我认为您打算使用 c(我还修复了 DeptID - 修复 SubDeptID 后的下一个错误)。试试这个说法

SELECT  e.Department
FROM    dbo.FA_PC a
        INNER JOIN dbo.users b
        on a.UserID = b.UserID
        INNER JOIN dbo.SubDeptTransfer c
            ON a.UserID = c.UserID  
        INNER JOIN dbo.SubDept d
            ON c.SubDeptID = d.SubDeptID
        INNER JOIN dbo.department e
            ON d.DeptID = e.DeptID
WHERE   a.FAID = $faidf

【讨论】:

  • 感谢您的所有回复,我能够将其与 cha 给出的答案联系起来。很少有错别字和恐慌谢谢:)
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2015-07-24
相关资源
最近更新 更多