在做查询的时候,有一列是表名,目前我只能通过在代码先确定了表名,再做关联查询。请问有没有其他办法可以一次性的把结果都搜索出来?
SELECT A.AID,A.VALUE,TB_AENTRY.VALUE_A FROM A
INNER JOIN B ON A.ID_B=B.BID AND B.TABLENAME='TB_A'
INNER JOIN TB_AENTRY ON B.BID=TB_AENTRY.TB_AID
WHERE A.VALUE<>TB_AENTRY.VALUE_A
写过程套个游标循环,用动态sql处理吧,动态sql你想怎么拼就怎么拼
如果数据库是oracle的话
declare
L_SQL VARCHAR2(4000);
begin
for REC in (SELECT *
FROM TABLE(ora_mining_varchar2_nt('TB_A', 'TB_B', 'TB_C'))) LOOP
L_SQL := L_SQL || 'SELECT B.BID,T.VALUE_' ||
SUBSTR(REC.COLUMN_VALUE, -1) || ' FROM B ,' ||
REC.COLUMN_VALUE || ' T WHERE B.BID=T.TB_' ||
SUBSTR(REC.COLUMN_VALUE, -1) || 'ID' || ' UNION ALL' ||
CHR(10);
END LOOP;
L_SQL := L_SQL || 'SELECT NULL,NULL FROM DUAL WHERE 1=2';
DBMS_OUTPUT.put_line(L_SQL);
END;
/
输出
SELECT B.BID,T.VALUE_A FROM B ,TB_A T WHERE B.BID=T.TB_AID UNION ALL
SELECT B.BID,T.VALUE_B FROM B ,TB_B T WHERE B.BID=T.TB_BID UNION ALL
SELECT B.BID,T.VALUE_C FROM B ,TB_C T WHERE B.BID=T.TB_CID UNION ALL
SELECT NULL,NULL FROM DUAL WHERE 1=2
另外,你这3个表的BID有没有可能有重复?如果没有重复,建议直接把这3个表union all起来再去关联B表,这样简单得多