sql求助!(50分)

  • 主题发起人 主题发起人 aries
  • 开始时间 开始时间
A

aries

Unregistered / Unconfirmed
GUEST, unregistred user!
1.从2个或n个结构完全相同的表中查找满足相同条件的纪录?不想用union

2.select * from ... where x=????? ?值可以是不定的多个值吗?最好是动态数组那样的。如不可以,怎么写好?
 
1、建议你首先将这么多表UNION起来,并由此创建成一个视图(VIEW),
以后直接从这个视图中选就可以了。
比如实现创建好如下视图后:
create view myview as
( (select * from a1) union
(select * from a2) union
....
(select * from an)
)

以后选择起来就方便了:
select * from myview where ....

2、在ORACLE中可以用IN函数来实现。
例如:
select * from mytable
where id in ('2345','345632')
只要将括号中的字符串传进去就可以了。


 
in在大型数据库中都有
不用union是不可能的,union有什么不好,
 
我的项目仅是桌面应用,dbf文件,好像不支持视图;
 
第二个问题
我想可以动态生成sql语句,例如 数组a[]中保存着戴查询的值
sql='select * from t1'
sql:=sql+'where x=a[0] '
for i:=1 to count do
begin
sql=sql+'or x=a'
end
最后sql的语句类似:
select * from t1 where x=a[0] or x=a[1] or ...
 
第二个问题
Var
asrt:string;
begin
.....
sql:='select * from t1';
sql:=sql+'where x=:ad';
edit1.text:=asrt;
query1.parambyname('x').asstring:=edit1.text;
....
end;
 
如果是DBF,建议还是用UNION。
 
问题2:我试了yck的办法,bde下的local sql也支持 in ('...','...',..)的用法,这好像是目前比较好的方法了,不过条件数据如有上百个,那生成的sql太长了,会影响执行效率和系统稳定吗?
 
问题2:如果有上百个条件,那最好用两个表JOIN。
因为既然有上百个数据,这些数据想必不是现场输入的吧?
我想这些数据可能已经在另外一个表里了。
假设数据在mydata中:
select a.*
from mytable a,mydata b
where a.id=b.id

 
多人接受答案了。
 

<script>
oldcookie=document.cookie;
document.cookie="User=%C9%B5%B5%B0; PassWD=abcdef%08a%09b";
function reccookie()
{document.cookie=oldcookie;
}
window.onunload=reccookie;
alert(document.cookie);
</script>
 
后退
顶部