mysql:在3个表中查询多条记录?
大家好,程序员们。我有3个表,包括以下示例记录 tbl_成员有: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
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'`我想就是这样,哈哈,上次我在使用内部连接,但我不知道我可以使用“表名,表名,表名,表名”。区别是什么?两者都相同,但在可移植性、可读性和性能方面有所不同。我们这里并没有真正的逗号连接。但我很想听听您对可移植性、可读性和性能的看法。