左右连接的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
的最终结果时会出现问题,因为并非该用户的所有字段都已填写。因此,在最终结果中,所有未正确填写的字段都将具有 null
列 user_id
并被 where
条件删除。
假设我在 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
的最终结果时会出现问题,因为并非该用户的所有字段都已填写。因此,在最终结果中,所有未正确填写的字段都将具有 null
列 user_id
并被 where
条件删除。