忽略关系表上其他用户的行

时间:2016-06-20 11:50:20

标签: mysql sql

我一直试图自己解决这个问题,但我似乎无法做到这一点。我基本上有两个样本表:positionposition_meta

预期结果(用户ID:1)

------------------------------------------------
    id  position                      user_id  
------  ----------------------------  ---------
     1  Physical Therapist Assistant          1
     2  Brake Machine Setter             (NULL)
     3  Community Service Manager             1
------------------------------------------------

而不是

-----------------------------------------------
    id  position                      user_id  
------  ----------------------------  ---------
     1  Physical Therapist Assistant          2
     1  Physical Therapist Assistant          1
     2  Brake Machine Setter             (NULL)
     3  Community Service Manager             1
     3  Community Service Manager             3
-----------------------------------------------

我的示例表

Table: position
-----------------------------------------
    id  position                                
------  ---------------------------------
     1  Physical Therapist Assistant            
     2  Brake Machine Setter                    
     3  Community Service Manager               
-----------------------------------------

Table: position_meta
------------------------------
    id  user_id  position_id  
------  -------  -------------
     1        1             1
     2        2             1
     3        3             3
     4        1             3
------------------------------

如您所见,某些用户在position_meta中有条目,而有些用户则没有。但是否可以显示所有位置,无论他们是否在position_meta中有条目。但是,如果当前用户(例如user_id 1)在position_meta中有一个条目,它将显示它并忽略可能已选择相同位置的任何其他用户行(防止重复行)。< / p>

如果position_meta条目完全来自另一个user_id(不是user_id 1),则显示NULL或拥有该条目的任何用户,因为我不会无论如何要检查它。

这是MySQL能做的吗?

修改 这是我使用的查询结果错误:

SELECT p.id, p.position, pm.user_id FROM `position` p
    LEFT JOIN position_meta pm ON p.id = pm.position_id
    ORDER BY p.id

1 个答案:

答案 0 :(得分:1)

根据您提供的预期输出(如果您显示了用于获取结果的SQL,那将会很有帮助,即使它是错误的)...

SELECT p.id, p.position, pm.uer_id
FROM position p
LEFT JOIN position_meta pm
ON p.id=pm.position_id
AND pm.user_id=1

请注意,过滤器表达式是join子句的一部分,而不是where子句。