我有50个具有类似结构的表格,名称为RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^product-detail/([\w-.]+)/?$ product-detail.php?e=$1 [NC,L]
,TABLE_1
,TABLE_2
等。我想选择一些信息,例如TABLE_3
,但我不知道哪个表包含此ID。我想我应该与这些表联合并从这个联盟中查询,但我担心这不是最好的解决方案。有人能帮助我吗?
答案 0 :(得分:0)
要查找包含字段CRM_ID的表,您可以使用:
select TABLE_NAME
from SYS.ALL_TAB_COLUMNS
where COLUMN_NAME = 'CRM_ID'
从这里,您可以使用您的联合查询相关表格
答案 1 :(得分:0)
select 'table_1', count(*) from table_1 where CMR_ID = 100
union all
select 'table_2', count(*) from table_2 where CMR_ID = 100
[.....]
如果您有50个表,您可能需要使用一些高级文本编辑,这样您就不必输入相同的50次。
答案 2 :(得分:0)
我无法看到与UNION
不同的内容,无法满足您的需求。
但是,我想避免每次需要查询表时重复所有代码,例如通过创建视图:
create view all_my_tables as
select * from table1
union
select * from table2
...
然后
select *
from all_my_tables
where crm_id = 100
答案 3 :(得分:0)
我会
create a view table_all as
select * from table_1 union all
select * from table_2 ...
但是我猜你有50个表,因为有一些性能原因,比如创建没有分区表的分区。如果是这种情况,你需要一些模拟索引的表,你需要有数据"排序"。然后创建包含以下内容的表:table_name,min_val,max_val: table_1,1,1000 table_2,1001,2000
和程序选择如下:
procedure sel(crmid) is
a varchar2(10);
value table%rowtype;
begin
select table_name into a from lookup where crmid between min_val and max_val;
execute immediate 'select * from ' || a || ' where crm_id = ' || crmid into value;
--do logic with value
end;
但如果没有订购数据,则需要迭代循环选择。在这种情况下使用视图。
答案 4 :(得分:0)
试试这个:
Select tmp.tablename from (
select 'table1' as tablename from table1 where CRM_ID=100
union all
select 'table2' as tablename from table2 where CRM_ID=100
) as tmp