none
因为不同的表含有相同的列名,就出错了 RRS feed

  • 问题

  •     我的PropertyTable和ContractTable有相同的列 address,于是下面的sql语句执行时出现了如图所示的提示,下面是我的代码,该怎么修改呢?

    --------------------------------代码--------------------------------

    select * from 
    (select *
    from ReceivableTable ) as Tab2 join 
    
    (select *
    from PropertyTable b join ContractTable a
    on a.ContractID=b.PropertyID 
    where b.PropertyState=1
    and a.PerformState='正在履行'
    and a.ContractType='租赁'
    and a.ContractNumber not like '%new%') as Tab1
    on Tab1.City+Tab1.Road+ Tab1.Address=Tab2.PropertyCRAR

    -------------------------------图1------------------------------------


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2014年1月14日 9:21

答案

  • 在select 的时候加上要哪个表的哪个字段

    例如:

    select a.a字段  ,b.b字段 from a表 as a 

    inner join 

    b表 as b

    on a.id=b.id

    这样才不会容易出错

    2014年1月17日 9:19

全部回复

  • 首先SELECT * 不是好的做法,你是要查询所有的数据?如果不是所有数据的话,指定列名称选择你要查询的Address。两个Address是否一样呢?如果一样选择一个就好了,如果不一样可以用AS 指定Address1,Address2。

    另外提一下你Tab中出现了两个Address字段,SQL Server就无法知道你要试用哪个Address做Join。


    Please Mark As Answer if it is helpful.


    2014年1月14日 12:55
  • select * from
    (select *
    from ReceivableTable ) as Tab2 join

    (select  a.*, b.*
    from PropertyTable b join ContractTable a
    on a.ContractID=b.PropertyID
    where b.PropertyState=1
    and a.PerformState='正在履行'
    and a.ContractType='租赁'
    and a.ContractNumber not like '%new%') as Tab1
    on Tab1.City+Tab1.Road+ Tab1.Address=Tab2.PropertyCRAR

    最简单的改法就是粗体标识的那样(select * 改成 select a.*, b.*)。

    顺便说一下,如果在表PropertyTable和ContractType中只需要少数列的话,

    最好指定列名,例如这里的a.Address和b.Address。

    2014年1月14日 14:23
  •     谢谢解答,但似乎这样也不行。错误如图所示!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2014年1月16日 1:55
  •     谢谢解答,但似乎这样也不行。错误如图所示!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    上面的问题是:on句子中的Tab1没法区分相同的列。

    PropertyTable和ContractTable有相同的列,那么连个表join后会产生重复的列(列名相同),肯定就没法区分了。

    所以我建议这样:如果a表中需要的列多一些,那么就使用[select a.*, b.address, b.city等等....]。

    你再试试。

    2014年1月16日 6:16
  •     那就可以理解为我的代码根本是行不通的吧? 必须在select的时候在相同的列名中,择其一!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2014年1月17日 7:31
  • 在select 的时候加上要哪个表的哪个字段

    例如:

    select a.a字段  ,b.b字段 from a表 as a 

    inner join 

    b表 as b

    on a.id=b.id

    这样才不会容易出错

    2014年1月17日 9:19