MySQL查询返回单个表中的所有行,而不考虑其他地方的匹配行

MySQL查询返回单个表中的所有行,而不考虑其他地方的匹配行,mysql,left-join,union-all,right-join,Mysql,Left Join,Union All,Right Join,我正在尝试实现MySQL版本的完全连接,但没有运气。我的结果需要包括来自“users”的所有行,无论该用户在其他表中是否有匹配的行。现在,我的结果并不完全是由于左连接的性质,但当我将所有的左连接和右连接在一起时,我的结果会进一步缩小 SELECT users.*, profile_status.*, photos.*, general.*, experience.*, occupation.*, flagged.*, last_update.*, job_search.*,

我正在尝试实现MySQL版本的完全连接,但没有运气。我的结果需要包括来自“users”的所有行,无论该用户在其他表中是否有匹配的行。现在,我的结果并不完全是由于左连接的性质,但当我将所有的左连接和右连接在一起时,我的结果会进一步缩小

SELECT 
    users.*, profile_status.*, photos.*, general.*, experience.*, occupation.*, 
    flagged.*, last_update.*, job_search.*, users.user_id AS userID, 
    user_profile_status.user_id AS profileID
FROM users
    JOIN profile_status ON users.user_id = profile_status.user_id
    LEFT JOIN photos ON users.user_id = photos.user_id AND photos.selected = 1
    LEFT JOIN general ON users.user_id = general.user_id
    LEFT JOIN occupation ON users.user_id = occupation.user_id
    LEFT JOIN experience ON users.user_id = experience.user_id
    LEFT JOIN flagged ON users.user_id = flagged.user_id
    LEFT JOIN job_search ON users.user_id = job_search.user_id
    LEFT JOIN last_update ON users.user_id = last_update.user_id
WHERE 
    users.approved = 1 AND users.admin_level = 0
ORDER BY last_update.last_update DESC
我对工会的企图

SELECT 
    users.*, profile_status.*, photos.*, general.*, experience.*, occupation.*, 
    flagged.*, last_update.*, job_search.*, users.user_id AS userID, 
    user_profile_status.user_id AS profileID
FROM users
    JOIN profile_status ON users.user_id = profile_status.user_id
    LEFT JOIN photos ON users.user_id = photos.user_id AND photos.selected = 1
    LEFT JOIN general ON users.user_id = general.user_id
    LEFT JOIN occupation ON users.user_id = occupation.user_id
    LEFT JOIN experience ON users.user_id = experience.user_id
    LEFT JOIN flagged ON users.user_id = flagged.user_id
    LEFT JOIN job_search ON users.user_id = job_search.user_id
    LEFT JOIN last_update ON users.user_id = last_update.user_id
UNION ALL
    SELECT 
    users.*, profile_status.*, photos.*, general.*, experience.*, occupation.*, 
    flagged.*, last_update.*, job_search.*, users.user_id AS userID, 
    user_profile_status.user_id AS profileID
FROM users
    JOIN profile_status ON users.user_id = profile_status.user_id
    RIGHT JOIN photos ON users.user_id = photos.user_id AND photos.selected = 1
    RIGHT JOIN general ON users.user_id = general.user_id
    RIGHT JOIN occupation ON users.user_id = occupation.user_id
    RIGHT JOIN experience ON users.user_id = experience.user_id
    RIGHT JOIN flagged ON users.user_id = flagged.user_id
    RIGHT JOIN job_search ON users.user_id = job_search.user_id
    RIGHT JOIN last_update ON users.user_id = last_update.user_id
WHERE 
    users.approved = 1 AND users.admin_level = 0
ORDER BY last_update.last_update DESC
表结构:

Table users
user_id  first_name   last_name   admin_level   user_approved  
1        tommy        jones       0             1      
2        johnny       rocket      0             1      
3        sally        hotpants    0             1  

Table profile_status
user_id  photo_uploaded   
1        1
2        1
3        1

Table photos
photo_id  user_id  filename      selected
1         1        photo_1.jpg   1
2         2        photo_2.jpg   0
3         2        photo_2.jpg   1
4         3        photo_3.jpg   1

Table general
user_id  city        state      zip     neighborhood
1        baltimore   maryland   00125   hamsterdam
2        lakeland    maine      11542   treemont
2        tipper      vermont    08483   NULL

Table experience
user_id  waldorf  kumon  homeschooling 
1        0       1       0
2        0       0       1

Table occupation
user_id  occupation 
1        teacher  
2        student    
3        student 

Table job_search
search_id  user_id  job
1          1        art teacher  
2          2        designer 

Table flagged
user_id  flagged 
1        1  
2        0    

Table last_update
update_id  user_id  last_update           photo_update
1          1        0000-00-00 00:00:00   0000-00-00 00:00:00
2          2        0000-00-00 00:00:00   0000-00-00 00:00:00

工会的第二部分都毫无意义。关于第一部分:有没有可能有用户在profile_status上没有匹配的记录?从其他示例来看,我似乎可以先左加入,然后联合,然后右加入,并获得与完全加入类似的结果。用户和profile_status是同时创建的,因此不可能有没有相应profile_status记录的用户只要将第一个连接更改为LEFT JOIN,查询就可以执行您想要的操作。我明白了,您试图模拟完整的外部连接,这在这里毫无意义,因为您正在进行正确的连接,但在WHERE子句中包含user表。此外,如果您想从用户表中获取所有匹配行,为什么需要获取该表中不存在的行?@Jamie。左外部联接链将保留第一个表中的所有行,而不管其他表中是否有匹配项。where子句只在第一个表上,因此它会过滤这些行——这大概就是您希望查询执行的操作。