Не работает вложенный SQL-запрос, ссылающийся на две разные базы данных - PullRequest
0 голосов
/ 02 мая 2018

Запрос:

SELECT xid 
FROM db2.pat_info 
WHERE xid IN (SELECT DISTINCT xid 
              FROM db1.audit 
              WHERE FUNCTION IN ('ABC','PQR') 
              AND xid NOT LIKE 'test%' 
              AND status = 1 
              AND ques_responded = 9) 
AND fname IS NOT NULL 
AND t_id IN (11,12)

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

Если оба запроса выполняются индивидуально, результат получается ожидаемым.

Столбец 'FUNCTION', упомянутый во внутреннем запросе, является 'функцией' в таблице. Его нельзя изменить, так как это старая реализация.

Любые выводы будут полезны.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Я не знаю, что происходит, когда вы объединяете запрос, но если у вас есть проблемы с производительностью, тогда я бы предложил использовать exists вместо in предложение

SELECT xid 
FROM db2.pat_info p
WHERE EXISTS (SELECT 1 
              FROM db1.audit 
              WHERE xid = P.xid AND FUNCTION IN ('ABC','PQR') AND 
                    xid NOT LIKE 'test%' AND 
                    status = 1 AND ques_responded = 9) AND 
fname IS NOT NULL AND t_id IN (11,12);
0 голосов
/ 02 мая 2018

IN может быть довольно неэффективным. Переключитесь на EXISTS или перейдите к предложению FROM:

SELECT pi.xid 
FROM db2.pat_info pi JOIN
     (SELECT DISTINCT xid 
      FROM db1.audit 
      WHERE FUNCTION IN ('ABC', 'PQR') AND
            xid NOT LIKE 'test%' AND
            status = 1 AND
            ques_responded = 9
     )  a
     ON pi.xid = a.xid
WHERE pi.fname IS NOT NULL AND pi.t_id IN (11, 12);

В некоторых версиях MySQL подзапрос перезапускается для каждой строки во внешней таблице.

...