0

假设我在 MySql 中有两个表。

值(地址字段值)

字段(地址字段)

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

为了使用他们尚未使用的所有其他字段检索他们的所有值,我正在执行左右连接的联合:(使用联合,因为 MYSQL 没有完整的外部连接)。

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。如果我在第二个中替换,请选择

value.user_id='4' 

GROUP BY field.id 

然后它返回 54 行(4 行已填写,外加所有 50 个可能的字段以及其他用户的值)。我也尝试对 value.* 使用虚拟值,但联合也没有正确合并记录,它再次返回 54 行。

有没有办法实现我所需要的?感谢您的任何想法……

4

1 回答 1

1

我认为一个简单的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条件删除。

于 2015-08-02T11:33:45.900 回答