【问题标题】:How to build sql query from two tables?如何从两个表构建 sql 查询?
【发布时间】:2019-06-26 04:12:27
【问题描述】:

Members 是俱乐部成员的表格。每个成员的各种详细信息通过 ID、姓名、地址、电子邮件等各种列包含在此表中。

现在,此表的任何两个成员都可以有关系。例如,如果 A、B、C 和 D 都是该表的成员,则 A 和 B 可以有关系; A 可以 C 有关系; B 和 D 可以有关系,等等。因此,虽然成员 A 可以与所有其他成员(例如 B、C 和 D 等)有关系,但他可以与任何其他成员有关系,无论哪种方式,即,它可以是 A-B 或 B-A。 对于这种关系,已经创建了一个新表关系。这只有 3 列;即ID、FirstMemberID、SecondMemberID。在这里,FirstMemberID 和 SecondMemberID 基本上都是 Members 表中成员(在关系中)的各自 ID。

现在,我想构建一个 SQL 查询(用于 MySQL),以从成员表中为所有与 ID 为 XYZ 的人有关系的成员选择完整的详细信息(所有列),其中 XYZ 是这种关系的第一部分。这里 XYZ 只是这个人的 ID,而不是他的名字。 所以,我可以第一个查询:

SELECT SecondMemberID FROM Relations WHERE FirstMemberID = XYZ;

这个查询给出了多个结果,因为 XYZ 与许多成员有关系。 另一个select语句是这样的:

SELECT * FROM Members WHERE ID = SecondMemberID;

[注意:这里,SecondMemberID 是第一个查询返回的内容。但是,正如我所说,这里可以有很多 SecondMemberID。]

我的问题是如何组合这两个查询以获得正确的结果。

我尝试了各种方法,例如将第一个查询的结果视为一个数组,然后在第二个查询中使用 IN 运算符,使用 PHP 的 implode 方法或其他方法。我也尝试过各种 JOIN 语句,但都没有成功。

我错过了什么?你能帮忙吗?

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    试试

    SELECT Members.* 
      FROM Relations LEFT JOIN Members 
        ON (Relations.SecondMemberID=Members.ID) 
     WHERE Relations.FirstMemberID = XYZ;
    

    【讨论】:

      【解决方案2】:

      您需要一个简单的 SQL JOIN 命令。 JOIN 连接两个表。 INNER JOIN 在特定条件下连接它们,即连接符合条件的两行(每个表中的一个)。条件通常类似于:table1.field1 == table2.field2 或者您可以使用 LEFT 或 RIGHT JOIN 依次连接两行,但右侧或左侧可以为空。

      【讨论】:

        【解决方案3】:

        我想你想要:

        SELECT SecondMemberID 
          FROM Relations 
         WHERE Id IN (SELECT SecondMemberID 
                        FROM Members
                       WHERE FirstMemberID = 'XYZ');
        

        【讨论】:

        • 不需要子查询而且您在外部引用了错误的表。
        • 谢谢。我想要稍微不同的结果,所以我根据您的建议进行了更改:SELECT * FROM Members WHERE Id IN (SELECT SecondMemberID FROM Relations WHERE FirstMemberID = 'XYZ');。根据您的建议,此查询在 phpMyAdmin 中使用时可以正常工作,但在我的 php 代码中没有给出结果。所以,我认为这是我正在努力解决的其他问题。再次感谢。
        • 现在,这个查询(正如我之前评论中提到的稍作修改)也在我的 php 代码中工作。非常感谢。抱歉,即使我投了赞成票,也没有反映我的投票,因为我的用户声誉低于 15,成为新用户。
        猜你喜欢
        • 2010-11-24
        • 1970-01-01
        • 2019-02-24
        • 2023-01-17
        • 2018-11-30
        • 2021-10-20
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        相关资源
        最近更新 更多