我需要帮助。
我有 2 个表,名称为 bkeys ( id, bkey, ip, user_id )
和 wp_usermeta
(是的,wordpress 表,感兴趣的字段是 user_id
,meta_key 和
meta_value
)。
我需要的是从 bkeys + meta_value 的值中选择所有行,其中 key 是昵称,因此结果将包含字段 bkey、ip 和 meta_value。
问题是,bkeys 表的 ip 和 user_id 可以为 NULL(意味着键还没有被任何用户获取),因此 user_id 为 NULL 的行不会被这样的查询选择
SELECT bkeys.bkey, bkeys.ip, wp_usermeta.meta_value
FROM bkeys
LEFT JOIN wp_usermeta ON ( bkeys.user_id = wp_usermeta.user_id )
WHERE meta_key='nickname'
我需要的是选择所有行,即使 user_id 为空。是否可以?如果是的话,怎么办?
最佳答案
尝试将 meta_key = 'nickname'
移至 ON
子句:
SELECT bkeys.bkey, bkeys.ip, wp_usermeta.meta_value
FROM bkeys
LEFT JOIN wp_usermeta ON wp_usermeta.user_id = bkeys.user_id
AND wp_usermeta.meta_key = 'nickname'
将LEFT JOIN
视为两阶段过滤:
- 首先尝试使用
ON
条件连接行,否则连接 NULL 行 - 您可以在
WHERE
条件下进一步过滤联接或 NULL 行。
关于mysql选择,如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815334/