Tricky JOIN Вопрос с неожиданными результатами - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь выполнить запрос для целей отчета и его поведение таким образом, что я не могу обернуть руку.Если кто-то может помочь мне с этим, по крайней мере, я мог бы спать спокойно

Табличные данные приведены ниже

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(""))

Так что у меня проблема в том, чтобы выстроить условия таким образомесли 2-е условие, т. е.

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

else

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

У меня есть запрос с несколькими объединениями и несколькими условиями для различных полей.Условия можно разделить на 2 основных условия, которые я хочу проверить .. например, (а) ИЛИ (x или y или z) ... Что я действительно хотел сделать, это если ни одно из условий x, y, z не являетсяtrue, затем выполните условие 'a', иначе запустите 'x или y или z' ... кое-как, как это всегда выполняется, даже если один из x, y, z имеет значение true .... Очень важно, если кто-то может указать мне направильное направление.Спасибо

1 Ответ

0 голосов
/ 12 февраля 2019

Вы можете попробовать это:

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

Объяснение этого запроса:

  • Получить результаты для x = 'value1'
  • Получить результаты дляy = 'значение2'
  • Получить результаты для z = 'значение3'
  • Получить результаты, если x не является 'значением1', а y не является 'значением1', а z не является значением1 , ноа это 'значение4' .Другими словами, если ни одно из условий 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...