一个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)
写成两个参数就行了,求教各位大侠为什么会这样?

解决方案 »

  1.   

    那样写当然会出错,你在tquery中会看到二个参数呀.你可以改写成:
    select * from table1 a where ( a.name = :NAME) and (a.age = select max(b.age) from table1 b where b.name = a.NAME)这样你就只要传一个参数呀.
      

  2.   

    按照方法一那样写法,可能不能用parambyname设置参数,但可以用params[0]和params[1]来设置吧?
      

  3.   

    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的值了
      

  4.   

    params[0],params[1],params[2],params[3] ...
      

  5.   

    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;
      

  6.   

    天,不是各位大侠都没碰到过这种情况吧。问题我应该是阐述明白了吧,就是在ADOQuery的SQL里,加一段sql语句,里面用到n个同样的值,是从程序里传进来的,用同一个参数就不成,不知道为何。兄弟先闪了啊,晚上哪位仁兄要是给解决了的话一定给分,分不够可再加,拜托拜托。
      

  7.   

    碰到过啦,估计是Delphi自己的问题,等我找DB的源代码看看。
      

  8.   

    可在Sql中定义变量,Sql server和Oracle的方法不同,先给此变量赋值
    Oracle 中的语法是  
    begin
      str_username varchar2(2);
      str_username := :username;
      select ...... where a.username=str_username....end;
    Sql server 的变量前则需要@这样,你就能实现只传一个参数而可以到处使用了。当然,用Procedure和Function则更好处理了
      

  9.   

    抱歉,oracle 的实现是不正确的。
    只能在T_SQL中实现了declare @name varchar2(20)
    @name= :name   --此处为参数
    select .... from ... where a.username=@name and ....以上是SQL Server 的实现方法。
    至于Oracle如何实现,我也不清楚了,不只哪位高人知晓。
      

  10.   

    select * from table1 a where ( a.name = :NAME) and (a.age = select max(b.age) from table1 b where b.name = a.NAME)
      

  11.   

    flyingkiller(大飞虫):朋友,你找到了症结所在了吗?