嵌套sql查询无法引用两个不同的数据库

dpiehjr4  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(319)

查询:

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”列是表中的“function”。它不能改变,因为它是旧的实现。
任何线索都会有帮助。

qpgpyjmq

qpgpyjmq1#

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的某些版本中,子查询是为外部表中的每一行重新运行的。

ppcbkaq5

ppcbkaq52#

我不知道合并查询时会发生什么,但是如果您有性能问题,那么我建议使用 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);

相关问题