Php 如果数据不在表中,如何使用左联接将记录显示为空

Php 如果数据不在表中,如何使用左联接将记录显示为空,php,mysql,join,left-join,Php,Mysql,Join,Left Join,对于成员id“10”,我们在“成员配偶信息”表中没有记录。它将跳过总成员id。如何使用上述查询获取成员id 10的数据?为什么要省略某些行?不幸的是,您将旧的表时间列表/WHERE id=id语法与更新且更有效的左连接语法结合在一起 SELECT MH.Home_Address_Id,MH.Member_Id,MH.First_Name,MH.Middle_Name, MH.Last_Name,MH.Address AS Preferred_Address,MH.City AS P

对于成员id“10”,我们在“成员配偶信息”表中没有记录。它将跳过总成员id。如何使用上述查询获取成员id 10的数据?为什么要省略某些行?

不幸的是,您将旧的表时间列表/WHERE id=id语法与更新且更有效的
左连接语法结合在一起

SELECT MH.Home_Address_Id,MH.Member_Id,MH.First_Name,MH.Middle_Name,
       MH.Last_Name,MH.Address AS Preferred_Address,MH.City AS Preferred_City,
       MH.State AS Preferred_State,MH.Zip ASPreferred_Zip,MH.Nickname,
       MH.Phone,MH.Mobile,MH.Email,
       (CASE WHEN MH.Preferred=0 THEN 'Work Address' 
             WHEN MH.Preferred=1 THEN 'Home Address' END)AS Preferred,
       (CASE WHEN MP.Status=0 THEN 'Current'
             WHEN MP.Status=1 THEN 'Past due' 
             WHEN MP.Status=2 THEN 'Paid' END)AS Status,
       MP.Payment_Amount,MP.Payment_Date,MT.Admiral_Title,MT.Spouse_Title,
       MT.Couple_Title,MS.First_Name AS Spouse_name,
       MS.Nickname AS Spouse_Nickname, 
       MS.Email AS Spouse_Email,sca.SubCategory_Name AS Admiral_Type_Id, 
       scr.SubCategory_Name AS Royalty_Type_Id,
       scp.SubCategory_Name AS Parent_Type_Id,
       scg.SubCategory_Name AS Guest_Type_Id,
       MM.Member_Note, g.Guest_Name AS Guest_Of
FROM
member_home_address MH,
member_payment_master MP,
member_mailing_title MT,
member_spouse_info MS,
member_master MM,
LEFT JOIN guest g ON g.Member_Id = MM.Member_Id
LEFT JOIN member_subcategory sca ON sca.SubCategory_Id = MM.Admiral_Type_Id
LEFT JOIN member_subcategory scr ON scr.SubCategory_Id = MM.Royalty_Type_Id
LEFT JOIN member_subcategory scp ON scp.SubCategory_Id = MM.Parent_Type_Id
LEFT JOIN member_subcategory scg ON scg.SubCategory_Id = MM.Guest_Type_Id
WHERE MH.Member_Id IN
(1,2,3,4,6,7,9,10,11,13,14,16,17,18,19,20,21,22,23,24,25,26,29,31,33,34,35,36,37,38,39,40,41 ,44,45,46,47,48,49,52,53,55,57,58,59,61,62,63,64,65,66,67,68,69,70,71,72,73,75,76,78,80,81,
87,88,89,91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,111,113,115,116,117,
118,119,121,122,123,124,128,129,130,131,133,134,135,136,137,138,139,140,141,143,145,146,148,
149,150,151,152,153,155,156,158,159,160,163,164,166,167,169,170,171,172,173,174,177,179,180,
181,182,183,185,186,187,189,191,192,193,194,196,198,199,202,205,206,209,210,211,212,213,214,
217,218,219,221,222,223,224,227,228,229,231,234,235,236,238,239,240,243,245,246,247,248,249,
251,252,253,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,274,275,277,
280,281,284,285,286,287,289,290,291,292,294,295,296,298,300,301,302,303,304,305,307,308,310,
311,313,314,315,316,318,320,321,322,323,324,325,327,328,331,332,334,336,337,338,339,341,343,
344,345,346,347,348,350,351,352,353,354,355,356,357,358,359,361,931,934,935,936,937,938,939,
940,941,942,944,945,946,947,948,950,951,952,1431,1432,1433,1434,1435,1436,1437,1438,1439,144
0,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1986,1987,1988,
1989,1990,1991,1992,1993,1994,1995,1996,3168,3164,3142,3143,3144,3154,3155,3156,3157,3158,
3159,3160,3161,3162,3165,3167)
    AND MH.Member_Id = MP.Member_Id
    AND MH.Member_Id = MT.Member_Id
    AND MP.Member_Id = MS.Member_Id
    AND MP.Member_Id = MM.Member_Id
相当于内部联接。因此,
MS
中缺少的记录正在抑制整个结果集记录

你想要这个吗

 FROM member_home_address MH,  ...
      member_spouse_info MS ...
WHERE ... MH.Member_Id = MS.Member_Id
然后,去掉这些WHERE子句。您已将它们移动到左连接语法中。如果将它们保留在原位,它们会将左连接操作转换为内部连接操作

FROM member_master MM
LEFT JOIN member_payment_master MP ON MM.Member_Id = MP.Member_Id
LEFT JOIN member_mailing_title MT ON MM.Member_Id = MT.Member_Id
LEFT JOIN member_spouse_info MS ON MM.Member_Id = MS.Member_Id
LEFT JOIN member_home_address MH ON MM.Member_Id = MH.Member_Id
LEFT JOIN guest g ON g.Member_Id = MM.Member_Id
LEFT JOIN member_subcategory sca ON sca.SubCategory_Id = MM.Admiral_Type_Id
LEFT JOIN member_subcategory scr ON scr.SubCategory_Id = MM.Royalty_Type_Id
LEFT JOIN member_subcategory scp ON scp.SubCategory_Id = MM.Parent_Type_Id
LEFT JOIN member_subcategory scg ON scg.SubCategory_Id = MM.Guest_Type_Id
我用
member\u master
开始这个连接列表,假设它实际上为每个成员包含一行,并且应该驱动连接的其余部分

由于某种原因,我不知道您的查询选择了行,并根据
成员\u home\u address
中的行驱动联接级联。你可以试着驾驶它

AND MH.Member_Id = MP.Member_Id  /*delete these!*/
AND MH.Member_Id = MT.Member_Id
AND MP.Member_Id = MS.Member_Id
AND MP.Member_Id = MM.Member_Id
相反


如果我是你,我会通过逐个联接表建立联接表来解决这个查询的故障。你是唯一拥有数据的人;StackOverflow无法帮助您找到丢失的记录。

在投影中使用IFNULL函数。。。Ex:IFNULL(columnName,'')此处带有“10”记录的成员id不存在于成员配偶信息表中。问题不在于该列。感谢@Ollie Jones的回复。我仍然得到相同的结果,其中有10条记录的成员id不存在。我忘了告诉你,同样的成员id信息也不存在于来宾表中。在where条件下,我们也在检查id和MP.member\U id=MS.member\U id。如果MS表中的记录10不存在,这总是失败谢谢你的回复@Ollie Jones
WHERE MM.Member_ID IN (/*dirty great list of member ids*/)