SQL中参数的问题

killlaoli 2002-11-12 03:06:38
一个sql语句中,要两次用到同一个参数的值,比如:
select * from table1 where ( name = :NAME) and (age = select max(age) from table1 where name = :NAME)
大概其就是这个意思,可却无法得到正确结果。如果换成形如:
select * from table1 where ( name = :NAME1) and (age = select max(age) from table1 where name = :NAME2)
写成两个参数就行了,求教各位大侠为什么会这样?
...全文
51 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingkiller 2002-11-13
  • 打赏
  • 举报
回复
碰到过啦,估计是Delphi自己的问题,等我找DB的源代码看看。
killlaoli 2002-11-13
  • 打赏
  • 举报
回复
斑竹救命啊!!!!!!!!!!!
cuisb 2002-11-13
  • 打赏
  • 举报
回复
哎,啊呆,果然是个苦命的孩子呀。二他妈妈,给我兄弟烙仨糖饼!
killlaoli 2002-11-13
  • 打赏
  • 举报
回复
flyingkiller(大飞虫):朋友,你找到了症结所在了吗?

lf43 2002-11-13
  • 打赏
  • 举报
回复
select * from table1 a where ( a.name = :NAME) and (a.age = select max(b.age) from table1 b where b.name = a.NAME)
Sunnyyuan 2002-11-13
  • 打赏
  • 举报
回复
抱歉,oracle 的实现是不正确的。
只能在T_SQL中实现了

declare @name varchar2(20)
@name= :name --此处为参数
select .... from ... where a.username=@name and ....

以上是SQL Server 的实现方法。
至于Oracle如何实现,我也不清楚了,不只哪位高人知晓。
Sunnyyuan 2002-11-13
  • 打赏
  • 举报
回复
可在Sql中定义变量,Sql server和Oracle的方法不同,先给此变量赋值
Oracle 中的语法是
begin
str_username varchar2(2);
str_username := :username;
select ...... where a.username=str_username....

end;
Sql server 的变量前则需要@

这样,你就能实现只传一个参数而可以到处使用了。当然,用Procedure和Function则更好处理了
killlaoli 2002-11-12
  • 打赏
  • 举报
回复
天,不是各位大侠都没碰到过这种情况吧。问题我应该是阐述明白了吧,就是在ADOQuery的SQL里,加一段sql语句,里面用到n个同样的值,是从程序里传进来的,用同一个参数就不成,不知道为何。兄弟先闪了啊,晚上哪位仁兄要是给解决了的话一定给分,分不够可再加,拜托拜托。
killlaoli 2002-11-12
  • 打赏
  • 举报
回复
大哥大姐们,帮帮忙,快下班了,不是让俺加班吧???????????????????????????????
killlaoli 2002-11-12
  • 打赏
  • 举报
回复
RobinHZ(熊掌) : 哥哥,我知道垃圾做法怎么做,可我想知道为什么不能一个参数搞定。我现在的垃圾做法就是形如:
在数据集的sql里写:
select field from table1
where name = :NAME1
union
select field from table2
where name = :NAME2
union
select field from table3
where name = :NAME3
union
select field from table4
where name = :NAME4
...............

然后在程序里
aqryx.close;
aqryx.Parameters.ParamByName('NAME1').value := 'tom';
aqryx.Parameters.ParamByName('NAME2').value := 'tom';
aqryx.Parameters.ParamByName('NAME3').value := 'tom';
aqryx.Parameters.ParamByName('NAME4').value := 'tom';
...................
aqryx.open;
RobinHZ 2002-11-12
  • 打赏
  • 举报
回复
params[0],params[1],params[2],params[3] ...
killlaoli 2002-11-12
  • 打赏
  • 举报
回复
smilelhh(blue) ,不好意思,在下没说清楚,这只是一个例子,事实上是一个很麻烦,挺长的sql,我从很多表中拿一个字段,然后做union,形如:
select field from table1
where name = :NAME
union
select field from table2
where name = :NAME
union
select field from table3
where name = :NAME
union
select field from table4
where name = :NAME
...............
这样在table2中就不知道table1中name的值了
dyf2001 2002-11-12
  • 打赏
  • 举报
回复
up
blueshu 2002-11-12
  • 打赏
  • 举报
回复
说的都有理
hippoxu 2002-11-12
  • 打赏
  • 举报
回复
up
RobinHZ 2002-11-12
  • 打赏
  • 举报
回复
按照方法一那样写法,可能不能用parambyname设置参数,但可以用params[0]和params[1]来设置吧?
smilelhh 2002-11-12
  • 打赏
  • 举报
回复
那样写当然会出错,你在tquery中会看到二个参数呀.

你可以改写成:
select * from table1 a where ( a.name = :NAME) and (a.age = select max(b.age) from table1 b where b.name = a.NAME)

这样你就只要传一个参数呀.
killlaoli 2002-11-12
  • 打赏
  • 举报
回复
谢谢熊掌兄长帮俺up一下,可谁给俺回答问题啊,大侠都跑哪里行侠仗义去了啊。
RobinHZ 2002-11-12
  • 打赏
  • 举报
回复
up

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧