【问题标题】:msyql union of left and right join plus where conidtion not working左右连接的mysql联合加上条件不起作用
【发布时间】:2015-08-02 11:15:14
【问题描述】:

假设我在 MySql 中有两个表。

值(地址字段值)

字段(地址字段)

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

要检索所有其他尚未使用的字段的所有值,我正在执行左右连接的联合: (由于 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 个。 如果我在第二个替换选择

value.user_id='4' 

有一个

GROUP BY field.id 

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

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

【问题讨论】:

    标签: mysql join left-join union right-join


    【解决方案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 条件删除。

    【讨论】:

    • 哦,伙计。我显然想得太复杂了。你的 sql 完美运行。谢谢。
    猜你喜欢
    • 2016-12-13
    • 2011-04-29
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多