mysql - 棘手的 JOIN 问题带来意想不到的结果

标签 mysql sql join

我正在尝试运行一个用于报告目的的查询,其行为方式是我无法控制的。如果有人能帮我解决这个问题,至少我可以安心 sleep 了

表格数据如下

Table1
-------

account_no|consumer_domain_name|system|search_text|status
AB00001   |XY00001             |Linux | Null      |active
AB00002   |XY00002             |Sybase| Null      |partial-active


Table2
------

consumer_domain_name|
XY00001            | 
XY00002            |


Table3
------


custodian_user_id|consumer_domain_name|
user-test1        |XY00001            |
user-test2        |XY00002            |

SELECT * FROM table1 a INNER JOIN table2 cad ON a.consumer_domain_name = 
cad.consumer_domain_name 
INNER JOIN table3 c ON c.consumer_domain_name = cad.consumer_domain_name 
WHERE 
LOWER(a.status) LIKE "%active%"
OR (LOWER(a.search_text) = LOWER("")
OR LOWER(c.custodian_user_id) = LOWER("")
OR LOWER(a.system) = LOWER(""))

所以我遇到的问题是以这样的方式安排条件,如果第二个条件即

LOWER(a.search_text) = LOWER("")
OR LOWER(c.custodian_user_id) = LOWER("")
OR LOWER(a.system) = LOWER("")

任何陈述都正确,

LOWER(a.search_text) = LOWER("")
OR LOWER(c.custodian_user_id) = LOWER("user-test1")
OR LOWER(a.system) = LOWER("")

应该显示

custodian_user_id|account_no|consumer_domain_name|system|status
user-test1       |AB00001   |XY00001             |Linux |active

其他

custodian_user_id|account_no|consumer_domain_name|system|status
user-test1       |AB00001   |XY00001             |Linux |active
user-test2       |AB00002   |XY00002             |Sybase|partial-active 

我有一个在各个字段上具有多个联接和多个条件的查询。条件可以分为我想检查的 2 个主要条件.. 例如 (a) OR (x 或 y 或 z) ...我真正想做的是如果条件 x,y,z 都不满足true 然后运行条件 'a' else 运行 'x 或 y 或 z' ...即使 x、y、z 之一为真,它总是运行 a...如果有人能指出我,真的很感激正确的方向。谢谢

最佳答案

你可以试试这个:

WHERE 
  (x = 'value1' OR y = 'value2' OR z = 'value3') OR 
  ((x != 'value1' and y != 'value2' and z != 'value3') and a = 'value4')

该查询的解释是:

  • 获取 x = 'value1' 的结果
  • 获取 y = 'value2' 的结果
  • 获取 z = 'value3' 的结果
  • 如果 x 不是“value1”、y 不是“value1”且 z 不是 value1,则获取结果 但 a 是“value4”。换句话说,如果 x、y、z 条件均未返回结果,则处理 a = 'value4'

WHERE 
  (x = 'value1' OR y = 'value2' OR z = 'value3') OR 
  (NOT (x = 'value1' OR y = 'value2' OR z = 'value3') and a = 'value4')

关于mysql - 棘手的 JOIN 问题带来意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54643840/

相关文章:

MySQL JOIN 和 ORDER 问题(对多个表进行排序)

Mysql触发器错误

PHP 和 mySQL 从数据库上传 pdf 图像

mysql - 如何按最接近的数值进行更新

sql - 比较 postgresql 中同一张表的值

MYSQL:返回一个表中的所有行以及另一个表中匹配行的总和

php - 我可以在 PHP + MySQL 网站的什么地方存储计数器?

MySQL 喜欢不喜欢 `\` ?

sql - 如何使用正则表达式选择字母数字字符

sql - 如何在 Postgresql 中加入 array_agg 列的 View ?