sql - 查询某些字段时,只返回每个字段都有数据的用户
问题描述
我希望为每个用户显示一个项目,无论他们是否具有 wpcf-dc-license-number、wpcf-dc-license-expiration 等的值。
目前,我的结果仅显示满足所有字段的用户的用户订单项。
SELECT lx_usermeta.meta_value AS dc_license_number,
lx_usermeta2.meta_value AS dc_license_expiration,
lx_usermeta3.meta_value AS md_license_number,
lx_usermeta4.meta_value AS md_license_expiration,
lx_usermeta5.meta_value AS va_license_number,
lx_usermeta6.meta_value AS va_license_expiration,
lx_usermeta7.meta_value AS first_name,
lx_usermeta8.meta_value AS last_name,
lx_usermeta9.meta_value AS ltx_company
FROM lx_usermeta
JOIN lx_usermeta lx_usermeta2 ON lx_usermeta.user_id = lx_usermeta2.user_id
JOIN lx_usermeta lx_usermeta3 ON lx_usermeta.user_id = lx_usermeta3.user_id
JOIN lx_usermeta lx_usermeta4 ON lx_usermeta.user_id = lx_usermeta4.user_id
JOIN lx_usermeta lx_usermeta5 ON lx_usermeta.user_id = lx_usermeta5.user_id
JOIN lx_usermeta lx_usermeta6 ON lx_usermeta.user_id = lx_usermeta6.user_id
JOIN lx_usermeta lx_usermeta7 ON lx_usermeta.user_id = lx_usermeta7.user_id
JOIN lx_usermeta lx_usermeta8 ON lx_usermeta.user_id = lx_usermeta8.user_id
JOIN lx_usermeta lx_usermeta9 ON lx_usermeta.user_id = lx_usermeta9.user_id
WHERE lx_usermeta.meta_key = "wpcf-dc-license-number"
AND lx_usermeta2.meta_key = "wpcf-dc-license-expiration"
AND lx_usermeta3.meta_key = "wpcf-maryland-license-number"
AND lx_usermeta4.meta_key = "wpcf-maryland-license-expiration"
AND lx_usermeta5.meta_key = "wpcf-virginia-license-number"
AND lx_usermeta6.meta_key = "wpcf-virginia-license-expiration"
AND lx_usermeta7.meta_key = "first_name"
AND lx_usermeta8.meta_key = "last_name"
AND lx_usermeta9.meta_key = "wpcf-ltx-company"
我已经尝试将 JOIN 更改为 LEFT JOIN、FULL JOIN、FULL OUTER JOIN,在 JOIN 语句之间放置 UNION,但我没有任何运气找到一种方法来连接这些字段而无需拥有所有 wpcf 字段的唯一要求填写。
谢谢您的帮助!
更新:我已经测试了这段代码:
SELECT lx_usermeta.meta_value AS first_name, lx_usermeta2.meta_value AS last_name
FROM lx_usermeta
JOIN lx_usermeta lx_usermeta2 ON lx_usermeta.user_id = lx_usermeta2.user_id
WHERE lx_usermeta.meta_key = "first_name"
AND lx_usermeta2.meta_key = "last_name"
这将一个接一个地显示所有用户,即使他们只有一个或什至没有 first_name 或 last_name。
什么可能会影响 wpcf-* 字段(自定义字段),因此当我对它们使用相同的语法时,我只会收到所有 wpcf 字段都有数据的结果?
解决方案
我尝试了你的建议 fubar,以及这个:
SELECT
um.meta_value AS dc_license_number,
um2.meta_value AS dc_license_expiration,
um3.meta_value AS md_license_number,
um4.meta_value AS md_license_expiration,
um5.meta_value AS va_license_number,
um6.meta_value AS va_license_expiration,
um7.meta_value AS first_name,
um8.meta_value AS last_name,
um9.meta_value AS ltx_company
FROM
lx_usermeta um
LEFT JOIN lx_usermeta um2 ON um.user_id = um2.user_id AND 'wpcf-dc-license-expiration' = um2.meta_key
LEFT JOIN lx_usermeta um3 ON um.user_id = um3.user_id AND 'wpcf-maryland-license-number' = um3.meta_key
LEFT JOIN lx_usermeta um4 ON um.user_id = um4.user_id AND 'wpcf-maryland-license-expiration' = um4.meta_key
LEFT JOIN lx_usermeta um5 ON um.user_id = um5.user_id AND 'wpcf-virginia-license-number' = um5.meta_key
LEFT JOIN lx_usermeta um6 ON um.user_id = um6.user_id AND 'wpcf-virginia-license-expiration' = um6.meta_key
LEFT JOIN lx_usermeta um7 ON um.user_id = um7.user_id AND 'first_name' = um7.meta_key
LEFT JOIN lx_usermeta um8 ON um.user_id = um8.user_id AND 'last_name' = um8.meta_key
LEFT JOIN lx_usermeta um9 ON um.user_id = um9.user_id AND 'wpcf-ltx-company' = um9.meta_key
WHERE
um.meta_key = 'wpcf-dc-license-number';
我现在得到了一些结果,但仅限于我的三个虚拟用户(一个空白公司名称,两个 Northwinds)和 Cushman Wakefield 用户。
这些用户是从不同的公司和不同的工作表导入的,并且为每个公司的每个用户适当地组合/更新数据。我只是说,库什曼韦克菲尔德不应该以任何方式与其他人不同。
谢谢你的帮助!
推荐阅读
- python - 具有多个嵌套类别的 Pandas DataFrame 到 JSON
- reactjs - 使用 React 路由器进行历史推送堆叠
- makefile - 如何静默变量属性(分配)?
- php - Laravel 7:将数据库结果分成 3 行结果,并将每个结果放入 bootstrap4 行
- python - 在字典中查找项目忽略关键案例
- go - 如何在 golang 中写入标准输入?
- angular - 使用angular8和springboot上传文件上传
- reactjs - 如何通过单击 React 挂钩中的按钮向 API 发送请求?
- google-cloud-run - 谷歌云中的空队列使用管道工 R api 运行
- azure - 在流分析工作并将它们路由到服务总线之后,事件中心中的事件会发生什么?