左右连接的mysql联合加上条件不起作用

msyql union of left and right join plus where conidtion not working

假设我在 MySql 中有两个 table。

值(地址字段值)

字段(地址字段)

可能有些人(值table中的user_id)没有填写所有的addressFields。 这意味着它们只有某些字段的值。

为了检索它们的所有值以及它们尚未使用的所有其他字段,我正在执行左右联合连接: (使用联合,因为 MYSQL 没有 FULL OUTER JOIN)。

SELECT field.*, value.*
FROM field
LEFT JOIN value ON field.id = value.field_id 
WHERE 
value.user_id='4'

union

SELECT field.*, value.*
FROM field  
RIGHT OUTER JOIN value ON field.id = value.field_id
WHERE 
value.user_id='4'

上面的联合并没有达到我想要的效果。 User=4 只填写了 50 个字段中的 4 个。查询结果只返回第 4 个。 如果我在第二个 select 中替换

value.user_id='4' 

GROUP BY field.id 

然后它返回 54 行(4 行加上来自其他用户的值的所有 50 个可能的字段)。 我也尝试过使用虚拟值作为值。* 但是联合也没有正确合并记录,它再次返回 54 行。

有什么方法可以实现我所需要的吗? 感谢您的任何想法......

我认为一个简单的 LEFT JOIN 就可以了:

SELECT fields.*, value.*
  FROM field

  LEFT JOIN value
    ON field.id = value.field_id
   AND value.user_id = 4

当您筛选 user_id=4 的最终结果时会出现问题,因为并非该用户的所有字段都已填写。因此,在最终结果中,所有未正确填写的字段都将具有 nulluser_id 并被 where 条件删除。