将这两个sql语句组合成一个具有相同功能的语句

时间:2010-04-19 12:36:20

标签: sql sql-server

我有一个sql语句;

select linkscat.id, linkscat.category 
from linkscat, contentlinks, links 
where contentlinks.linksid = links.id 
  and contentlinks.contentid = @contentid 
  and links.linkscatid = linkscat.id 
order by linkscat.category

和sql语句2从上面的语句中获取一个名为@linkscat的参数,它是'id';

select * from links where linkscatid= @linkscat

我在尝试使用许多sqldatareaders,嵌套转发器等时遇到了各种各样的麻烦,但如果所有的工作都可以在一个声明中完成,那会很棒吗?这是可能的,如果是这样,请您通过发布最终声明来帮助吗?

非常感谢,非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

您已经在使用联接,因此您只需将所需字段添加到select子句:

select linkscat.id, linkscat.category, links.* 
from linkscat, contentlinks, links 
where contentlinks.linksid = links.id 
  and contentlinks.contentid = @contentid 
  and links.linkscatid = linkscat.id 
order by linkscat.category

虽然我只会说明必填字段而不是使用*,但会使用显式连接:

select linkscat.id, linkscat.category, links.link, links.name  
from linkscat
  inner join links
   on links.linkscatid = linkscat.id 
  inner join contentlinks
   on contentlinks.linksid = links.id 
where contentlinks.contentid = @contentid 
order by linkscat.category

答案 1 :(得分:0)

怎么样

select * from links where linkscatid in (
    select linkscat.id
    from linkscat, contentlinks, links 
    where contentlinks.linksid = links.id 
      and contentlinks.contentid = @contentid 
      and links.linkscatid = linkscat.id 
    order by linkscat.category)

但我不确定你的表格格式。也许它应该是select * from links where id in ...

答案 2 :(得分:0)

您应该只需将链接表中所需的字段直接添加到查询中即可。我建议你使用链接表中的实际字段名称,而不是*。

select linkscat.id, linkscat.category, links.field_1, links.field_2, ...
    from linkscat, contentlinks, links 
    where contentlinks.linksid = links.id 
      and contentlinks.contentid = @contentid 
      and links.linkscatid = linkscat.id 
    order by linkscat.category