成员是俱乐部会员的表。该表中通过ID,名称,地址,电子邮件等各种列包含了每个成员的各种详细信息。
现在,该表的任何两个成员都可以有关系。例如,如果A,B,C和D均为该表的成员,则A和B可以具有关系; A罐C有关系; B和D可以有关系等。因此,虽然成员A可以与所有其他成员(例如B,C和D等)有关系,但他可以以任何一种方式与任何其他成员有关系,即可以是AB或BA。 对于此关系,已创建一个新的表Relations。它只有3列;即ID,FirstMemberID,SecondMemberID。在这里,FirstMemberID和SecondMemberID基本上都是从Members表中的成员(在某种关系中)各自的ID。
现在,我想构造一个SQL查询(用于MySQL)以从Members表中选择与ID为XYZ的人有关系的所有成员的完整详细信息(所有列)。这种关系的第一部分。此处XYZ只是该人的ID,而不是他的名字。 因此,我可以第一个查询:
SELECT SecondMemberID FROM Relations WHERE FirstMemberID = XYZ;
此查询给出多个结果,因为XYZ与许多成员都有关系。 另一个选择语句是这样的:
SELECT * FROM Members WHERE ID = SecondMemberID;
[注意:此处,SecondMemberID是第一个查询返回的内容。但是,正如我说的,这里可以有很多SecondMemberID。]
我的问题是如何以使我获得正确结果的方式组合这两个查询。
我尝试了各种方法,例如将第一个查询的结果视为数组,然后通过使用PHP的implode方法或其他方式在第二个查询中使用IN运算符。我也尝试了各种JOIN语句,但没有成功。
我想念什么?你能帮忙吗?
答案 0 :(得分:0)
尝试
SELECT Members.*
FROM Relations LEFT JOIN Members
ON (Relations.SecondMemberID=Members.ID)
WHERE Relations.FirstMemberID = XYZ;
答案 1 :(得分:0)
您需要一个简单的SQL JOIN命令。 JOIN连接两个表。 INNER JOIN在特定条件下将它们连接起来,即,将匹配条件的两行(每个表中的每一行)连接起来。条件通常类似于:table1.field1 == table2.field2
,或者您可以使用LEFT或RIGHT JOIN,这将依次联接两行,但左右一行可以为空。
答案 2 :(得分:-1)
我想你想要
SELECT SecondMemberID
FROM Relations
WHERE Id IN (SELECT SecondMemberID
FROM Relations
WHERE FirstMemberID = 'XYZ');