T-SQL连接表存在于哪里

时间:2018-04-10 13:38:54

标签: sql-server tsql

我有以下查询

select * 
from monthly_accounts m
join blocks_Dep on (m.code = d.code )
where exists (select R_code 
              from balance c 
              inner join blocks_div d on (m.b_id = d.b_id and c.name = d.name)
             )

我收到有关无效m.b_i标识符的错误消息;如何使用连接在存在的第一个表和表之间进行连接?

2 个答案:

答案 0 :(得分:1)

也许您收到该错误,因为运营商exists而不是exist。这有用吗?

select m.*, d.*
from monthly_accounts m join
     blocks_Dep d
     on m.code = d.code
where exists (select 1
              from balance b inner join
                   blocks_div bd
                   on b.name = bd.name
              where m.b_id = bd.b_id
             );

请注意,我做了其他更改并解决了其他问题:

  • blocks_dep没有表别名。
  • 我为所有表分配了表名的缩写表别名。
  • 我将关联子句移到where而不是on。我不希望在on中看到相关子句(尽管逻辑是正确的)。

答案 1 :(得分:1)

你有一些答案

核心应该站在它自己的上面 使用别名并且不要重复别名

select * from 
monthly_accounts m
join blocks_Dep on (m.code=d.code)

d尚未定义。即使查询解析器发现它我怀疑这是你想要的。

这链接m.b_id不存在,我认为你的意思是什么?

select * 
from monthly_accounts m
join blocks_Dep d1
      on m.code = d1.code 
where not exists ( select 1 
                   from balance c 
                   join blocks_div d2  
                     on d2.b_id = m.b_id  
                    and d2.name = c.name 
                 )