我一直试图自己解决这个问题,但我似乎无法做到这一点。我基本上有两个样本表:position
和position_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
答案 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子句。