代码之家  ›  专栏  ›  技术社区  ›  schmoopy

确定fk的行是否存在于20个表中的任何一个表中

  •  0
  • schmoopy  · 技术社区  · 17 年前

    我希望这是有意义的,如果不是,我会尝试进一步解释。

    4 回复  |  直到 17 年前
        1
  •  1
  •   Av Pinzur FryGuy    17 年前

    我不确定我是否理解这个问题。以下情况会改善您的情况吗?

    if exists(select * from Table1 where ForeignKeyColumn = searchValue)
      or exists(select * from Table2 where ForeignKeyColumn = searchValue)
      or exists(select * from Table3 where ForeignKeyColumn = searchValue)
      or ...
    
        2
  •  0
  •   Nathan Fisher    17 年前

    假设这20个表保持一致,那么对每个表使用一个左外部联接怎么样。这可能是一种低效的方法,但应该有效

    select Id from 
        (Select PK.id, isnull(tbl1.fk,0) as fk1, isnull(tbl2.fk,0) as fk2 ... etc
        from pk left join tbl1 on pk.id = tbl1.fk left join
            tbl2 on pk.id = tbl2.fk ... etc) as VirtualTable
    Where fk1>0 or fk2>0 ... etc
    
        3
  •  0
  •   Rob Farley    17 年前

    那么,您正在尝试确定是否可以删除某一行?

    begin tran;
    delete tablename
    where id = 3;
    rollback tran;
    

        4
  •  0
  •   RMorrisey    17 年前

    比如说:

    if exists (
     select * from Table1 where MyKey = @key
     union
     select * from Table2 where MyKey = @key
     union
     select * from Table3 where MyKey = @key
     ...
    )
    

    我面前没有打开一个SQL server实例,所以我肯定它的某个地方有语法错误,但您知道的是=)