SELECT fact FROM Facts WHERE name = ? and Type = 1 UNION SELECT BaseFacts.fact FROM Facts as BaseFacts JOIN Facts as AliasFacts ON BaseFacts.fact_id = Convert(int,AliasFacts.data) WHERE AliasFacts.name = ? and AliasFacts.Type = 2 and BaseFacts.Type = 1 -- and this all works only if you do not ever have an alias to an alias! #### SELECT fact FROM Facts WHERE name = ? UNION SELECT fact FROM Facts JOIN Aliases ON Aliases.fact_id = Facts.fact_id WHERE Aliases.name = ? #### SELECT fact FROM Facts JOIN Names ON Names.Fact_id = Facts.fact_id WHERE Names.Name = ?