【问题标题】:How to select data from two tables using a single query如何使用单个查询从两个表中选择数据
【发布时间】:2012-09-26 15:22:39
【问题描述】:

我一直在努力了解如何使用单个查询从我的两个表中选择数据。如果有人可以提出比单个查询更好的方法,我全神贯注!以前我会使用两个查询来做到这一点,尽管我被引导相信单个查询会更好,因此我可以轻松地完成这项工作,因此尝试学习。

我的一张桌子与此类似,但已缩小。将此表称为“成员”:

ID  |  firstName  |   lastName  | networkingID

还有另一个我称之为“网络”的表:

ID  |  websiteURL | facebookURL | twitterURL


我想要做的是在表member 上运行查询,例如:

SELECT * FROM `member` WHERE `ID`=2

从表member返回数据。

不过,我也希望从表 networking 返回相关值。表member 中的列networkingIDnetworking 中行的ID

我该怎么做呢?

到目前为止,我已经尝试使用通过 Google 找到的所有 JOIN,但无法使其正常工作。我最好的结果是LEFT JOIN,其中所有列都存在,但网络表的结果都是NULL

【问题讨论】:

  • 所以当您进行内部或外部联接时,您会从网络表中获取空值吗?您在每个表中谈论多少行?你确认过ID其实是两者的共同值吗?左连接将为您提供第一个表中的所有行和第二个表中存在匹配项的行,如果没有匹配项,则为第二个表提供空值。听起来 member.networkingId = networking.id 不是您认为的那样
  • 成员表中networkid是否有外键约束?
  • 只是一个非常愚蠢的原作者。不知何故,尽管记得添加了测试值,但数据库中缺少测试值;我认为这解释了 NULL 结果。你可以说这是漫长的几天!
  • 可以理解。似乎大多数“回答者”并没有真正阅读过这个问题。关键是要记住不同类型的连接做什么以及结果集应该是什么。如果不是您所期望的,请查看数据以查看是否存在异常
  • 我以前从未使用过任何形式的连接,并且在快速搜索后并不完全确定它的使用,所以只是假设它是一个编码错误。这肯定会教给我未来。

标签: php mysql join


【解决方案1】:
SELECT * FROM member
LEFT JOIN networking
ON member.networkingID=networking.ID
WHERE member.ID=2

【讨论】:

  • 感谢您清理它,Smamatti :)
【解决方案2】:

简单的连接,在一个共同的 id 之间。内连接将确保网络表中有记录,否则不会显示该成员。如果您想要所有 member 行,则可以用 LEFT JOIN 替换它,无论它们是否在 network 表中加入任何内容

 SELECT * FROM member m 
      INNER JOIN networking n 
 ON (m.networkingID = n.id) 
 WHERE m.id = 2;

【讨论】:

    【解决方案3】:
    select
       *
    from
       member as m
       left outer join
          networking as n
       on
          m.networkingID=n.ID
    

    【讨论】:

      【解决方案4】:

      JOIN 应该可以工作。

      SELECT * FROM member, networking WHERE member.ID=2 AND member.networkingID=networking.ID
      

      如果 member.ID=2 没有网络数据,这将返回一个空结果。如果你想在这种情况下得到一个结果,你可以尝试 LEFT JOIN。

      SELECT * FROM member LEFT JOIN networking ON member.networkingID=networking.ID WHERE member.ID=2
      

      【讨论】:

        【解决方案5】:
        select * from member a, networking b 
        where a.networkingID=b.ID and a.ID = 2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多