【问题标题】:MySQL Issue joining table with two columns against oneMySQL问题连接表,两列对一
【发布时间】:2016-10-21 17:51:33
【问题描述】:

我有一个包含 id、first、last 和 Identification 列的联系人表。试图让名称显示在更大的连接中。加入两列时我无法显示它。

表格:

检查 ID Order_Id Inspector_Id

联系人 ID 名 姓 订购者 督察

这是我的选择:

$sql = " SELECT 
        Inspections.Id,     
        Inspections.Orderer_Id,
        Inspections.Inspector_Id,   
        Contacts.Id 
        Contacts.First_Name AS OFirst,
        Contacts.Last_Name AS OLast,
        Contacts.First_Name AS IFirst,
        Contacts.Last_Name AS ILast,

FROM Inspections
JOIN Contacts ON Inspections.Orderer_Id &&         Inspections.Inspector_Id=Contacts.Id
WHERE
                Inspections.Id = " . $trigger . ";";

这只是最新的尝试。我尝试了多种加入他们的方法,但我想我只是很难翻译我在搜索时找到的代码。任何帮助将不胜感激!

【问题讨论】:

  • 三列中的值是否相同?您需要指定两个单独的表达式。如Inspections.orderer_id = Contacts.id AND inspections.inspector_id=contacts.id。但如果这是你想要的情况,我建议只加入 1 并在 where 子句中比较 Inspections.orderer_id = Inspections.inspector_id
  • 您的连接条件语法无效:Inspections.Orderer_Id 不是布尔表达式,我相信您的意思是Inspections.Orderer_Id =Contacts.Id。另外&& 不是有效的SQL,你需要使用AND
  • @jmoerdyk 而AND 是传统的SQL,mysql 允许&&|| 在表达式中。 manual
  • 抱歉,使用 MSSQL 这么久了,我的 MySQL 生锈了:P
  • Orderer_Id 和 Inspector_Id 中的值都指向 Contacts.Id。

标签: php mysql join


【解决方案1】:

只有在 Inspector 和 Orderer 是同一个人的情况下,您当前的查询才会起作用(一旦语法错误被清除),如果不是,您必须使用表别名加入 Contacts 两次:

 SELECT 
        Inspections.Id,     
        Inspections.Orderer_Id,
        Inspections.Inspector_Id,   
        orderer.Id AS OId,
        orderer.First_Name AS OFirst,
        orderer.Last_Name AS OLast,
        inspector.Id AS IId,
        inspector.First_Name AS IFirst,
        inspector.Last_Name AS ILast    
FROM Inspections
JOIN Contacts AS orderer ON Inspections.Orderer_Id = orderer.Id
JOIN Contacts AS inspector ON Inspections.Inspector_Id = inspector.Id
WHERE Inspections.Id = xxxx

【讨论】:

  • 好的,我明白你的目的了。我试图直接输入,它是不行的,但我有一个问题。您如何/在哪里声明 orderer.Id 实际上是 Contacts.Id?检查员也一样。我看到那些应该是表别名,但不知道如何设置。我将继续在网上搜索并使用您的示例。感谢您一直以来的帮助!
  • 没关系!我错过了在 ILast 之后添加“,”。 (之后我还有更多的选择。这非常有效。谢谢一百万!我没有足够的代表来标记为已回答,但你成功了。
  • 在 JOIN 条件中,在表名后面设置查询中的别名。我更新了查询以使其更清晰,AS 之后的名称设置了AS 之前的表的别名。大多数 SQL 服务器允许您省略 AS 关键字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2021-10-09
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多