mysql:在3个表中查询多条记录?

mysql:在3个表中查询多条记录?,mysql,wampserver,Mysql,Wampserver,大家好,程序员们。我有3个表,包括以下示例记录 tbl_成员有: mem_id | mem_fname | mem_lname 1 | Ryan | Layos 2 | Dhave | Sebastian 3 | Staven | Siegal 4 | Ma Ethel | Yocop 5 | Kelvin | Salvador 6 | Herbert | Ares tbl_成员_状态为: stat

大家好,程序员们。我有3个表,包括以下示例记录

tbl_成员有:

mem_id | mem_fname | mem_lname
  1    |  Ryan     | Layos
  2    |  Dhave    | Sebastian
  3    |  Staven   | Siegal
  4    |  Ma Ethel | Yocop
  5    |  Kelvin   | Salvador
  6    |  Herbert  | Ares
tbl_成员_状态为:

status_id | mem_id | leader_id | process_id
    1     |   2    |     1     |    2
    2     |   3    |     5     |    3
    3     |   4    |     6     |    4
    4     |   5    |     1     |    4
    5     |   1    |     6     |    4
(tbl_member_status.mem_id是tbl_members.mem_id的外键,leader_id也是tbl_members.mem_id的外键,因为在我的情况下,成员可以是领导者。1个成员1个领导者)

tbl_流程包括:

process_id | process_type
    1      | CONSOLIDATION
    2      | PRE-ENCOUNTER
    3      | ENCOUNTER
    4      | POST-ENCOUNTER
(一个成员有一个我使用枚举值的过程:合并、遭遇前、遭遇后、遭遇后等)

我现在的问题是,在获得所需的输出查询时,正确的sql查询是这样的

tbl\u查询结果

   mem_id | member_fname | member_lname | leader_fname | leader_lname | process_type
    2     |  dhave       |  sebastian   |    Ryan      |   Layos      |  PRE-ENCOUNTER
    5     |  Kelvin      |  Salvador    |    Ryan      |   Layos      |  POST-ENCOUNTER
请记住,两列tbl_成员_状态是指一列tbl_成员,即mem_id

更新:

到目前为止我所做的:

SELECT member.mem_fname, member.mem_lname, leader.mem_fname, leader.mem_lname, tbl_process.process_type
FROM 
    tbl_member_status as mem_stats
INNER JOIN 
    tbl_members as member 
INNER JOIN 
    tbl_members as leader 
INNER JOIN 
    tbl_members ON mem_stats.member_id = member.mem_id
INNER JOIN
    tbl_process ON tbl_process.process_id = mem_stats.process_id
WHERE 
    leader.mem_fname = 'Ryan'

即使leader.mem\u fname不等于“Ryan”,此查询也会获取所有记录

,因为当您进行查询时。结果中的行数很重要。比如:如果您的结果是fname=ryan,那么memberstatus表中mem.id的匹配项是2,而process表中mem.id的匹配项也是2。总之,最终输出中将有2行。 你能试试这个吗

Select M.member_fname, M.mem_lname P.process_type from tbl_members M, tbl_member_status MS, tbl_process P where M.mem_id = MS.mem_id and MS.process_id = P.process_id and where M.member_fname = 'ryan'
好吧,一开始我误解了你的问题。我为您提供了一个解决方案,它将改进您的数据库模式。如果一个成员只有一个领导,而一个领导有多个成员。那个么为什么不创建一个名为leader的不同表并直接连接到members表呢?因此,这将是一对一的关系。这将使查询更加简单。现在你有4张桌子了

Select M.member_fname, M.mem_lname, L.fname, L.lname, P.process_type 
from tbl_members M, tbl_member_status MS, tbl_process P, tbl_leader L
where M.leader_id = L.id and M.mem_id = MS.mem_id and MS.process_id = P.process_id and where M.member_fname = 'ryan'

好问题。通常情况下,您的程序员同事希望在发送他们的请求之前看到您自己的尝试。不知怎的,我通过这个查询(您建议的)得到了我问题的答案:`选择MEM.MEM_fname作为memFNAME,LEAD.MEM_fname作为leadFname,P.process_type FROM tbl_member_status MS,tbl_members MEM,tbl_members LEAD,tbl_process P其中MS.member_id=MEM.MEM_id和MS.leader_id=LEAD.MEM_id和MS.process_id=P.process_id和LEAD.MEM_fname='Ryan'`我想就是这样,哈哈,上次我在使用内部连接,但我不知道我可以使用“表名,表名,表名,表名”。区别是什么?两者都相同,但在可移植性、可读性和性能方面有所不同。我们这里并没有真正的逗号连接。但我很想听听您对可移植性、可读性和性能的看法。