php - MYSQL:仅返回与两个没有冲突的表匹配
问题描述
我想知道这是否可以只用一个查询来完成。
你看,我有这个表user_leads,我需要加入这个表两个表:lead_forms和user_services分别在formid和serviceid列上。
此查询的结果应仅返回与 user_services 或 lead_forms 匹配的行。不要在这两个中的至少一个上返回不匹配的行。
由于这两列的性质,两者都可以设置,有时会设置一个而另一个为 NULL。通常这两个表中的任何一个都不匹配。
所以问题是,如果我像这样进行内部连接
FROM `user_leads`
INNER JOIN lead_forms ON lead_forms.formid = user_leads.formid
但是然后做
INNER JOIN user_services ON user_services.serviceid = user_leads.serviceid
它将返回与lead_forms 匹配的所有匹配项,并在应该返回它们时忽略与user_services的一些匹配项。如果我执行以下操作
FROM `user_leads`
WHERE user_leads.formid > 0 OR user_leads.serviceid > 0
LEFT OUTER JOIN user_services ON user_leads.serviceid = user_services.serviceid
LEFT OUTER JOIN lead_forms ON user_leads.serviceid = lead_forms.formid
就像我想要的那样,它返回两个表中的所有匹配项,但是由于它是 LEFT OUTER JOIN 它还返回来自 user_leads 的行,这些行在 user_services或lead_forms中没有匹配,从而导致错误。
我不想检查匹配项,除非真的没有其他方法可以用 MYSQL 做到这一点。因此,如果您知道执行此操作的正确方法,我们将不胜感激。
解决方案
LEFT
如果您添加条件以使至少 1 个连接列不为空,则连接将执行您想要的操作:
LEFT OUTER JOIN user_services ON user_leads.serviceid = user_services.serviceid
LEFT OUTER JOIN lead_forms ON user_leads.serviceid = lead_forms.formid
WHERE user_services.serviceid IS NOT NULL OR lead_forms.formid IS NOT NULL
推荐阅读
- c++ - std::cout 与 printf;机器语言有什么不同吗?
- ms-access - 访问格式化十六进制最少四位
- php - 从主树php获取子树
- flutter - 如何导入依赖于 Flutter 平台的 Dart 文件或包?
- sql-server - Azure 中的数据质量服务
- java - java.nio.file.NoSuchFileException 调用 File.transferTo() 时
- c# - 在多维数组c#中提取XML值
- powershell - I need to get IPv4 address and memory with powershell with Get-SCVirtualMachine
- gcc - g++: error: unrecognized '-std=c++17' (什么是 g++ 版本以及如何安装)
- node.js - 如何使用moongoose访问整个子文档(对象数组中的对象数组)?