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