簡體   English   中英

mysql:在3個表中查詢多個記錄?

[英]mysql: query multiple records in 3 tables?

各位程序員,大家好。 我有3張桌子,下面是示例記錄。

tbl_members具有:

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_member_status具有:

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具有:

process_id | process_type
    1      | CONSOLIDATION
    2      | PRE-ENCOUNTER
    3      | ENCOUNTER
    4      | POST-ENCOUNTER

(成員有一個過程要使用我使用帶有以下值的枚舉:CONSOLIDATION,PRE-ENCOUNTER,ENCOUNTER,POST-ENCOUNTER等)

我的問題現在是正確的sql查詢,以獲取所需的輸出查詢,如下所示。

tbl_query_result

   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_member_status的兩列是指tbl_members的一列,即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_fname不等於“ Ryan”,此查詢也會獲得所有記錄

因為當您查詢。 結果中的行數很重要。 像:如果您的結果是fname = ryan,但是表memberstatus中的mem.id匹配項是2,然后在進程表中匹配項是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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM