Sql表达式中的不明确的列名称

Tro*_*roz 3 sql sql-server delphi ado

我有两张桌子; 它们通过Delphi ado链接通过列名称上的关系详细信息加入

第一个表有一堆数据,一个fileref作为键1,第二个表有数据行,fileref有键2

第一个表有其他信息,但有一个fileref值,第二个表包含许多fileref值但不同的帐户

表1:id,fileref,1,2,3,4,5,accno,7,8,9等等......

表2:id,fileref,accno

  SELECT * FROM vtindex a
  JOIN vi_accno b
  ON b.fileref = a.FileRef
  WHERE (a.AccNo like '%123456789%') or (b.accno like '%123456789%')
Run Code Online (Sandbox Code Playgroud)

上面是我得到模糊错误的查询

我的想法是,如果我没有找到accno是表1,它必须尝试在表2中找到它

希望这是有道理的,如果我在MSSMS中运行查询,查询返回结果没有错误

Ric*_*ner 5

你将不得不声明你的列,就像这样;

SELECT
     a.ID A_ID
    ,a.fileref A_fileref
    ,a.Field1 A_Field1
    ,a.Field2 A_Field2
    ,a.accno A_Accno
    ,b.id B_ID
    ,b.fileref B_fileref
    ,b.accno B_accno
FROM vtindex a
JOIN vi_accno b
    ON a.fileref = b.fileref
WHERE a.AccNo like '%123456789%'
    OR b.accno like '%123456789%'
Run Code Online (Sandbox Code Playgroud)

如果你只想宣布一些,那么这样做;

SELECT
     a.*
    ,b.id B_ID
    ,b.fileref B_fileref
    ,b.accno B_accno
FROM vtindex a
JOIN vi_accno b
    ON a.fileref = b.fileref
WHERE a.AccNo like '%123456789%'
    OR b.accno like '%123456789%'
Run Code Online (Sandbox Code Playgroud)

你的问题是,你要使用如领域id,fileref并且accno不止一次(每个表)和名称冲突.如果您更改表格上只有3条记录的名称,那么您可以将表格保留为原样.