select R.rname as 读者姓名,B.bname as 图书名称,P.pdate as 罚款日期,P.amount 罚款金额
from T_Book as B
inner join T_penalty as P on(B.bid=P.bid)
inner join T_Reader as R on(R.rid=P.rid)我想用子查询代替多表连接查询,怎么改啊?

解决方案 »

  1.   

    你要用到P和R的数据,除非放到select那里实现。这个表关联出问题了吗?
      

  2.   

    可以这样写:
    select (select rname from T_reader where rid=p.rid)as 读者姓名,
    (select bname from t_book where bid=p.bid) as 图书名称,罚款日期,罚款金额
    from T_penalty as p
    但查询效率比连接要差很多.
      

  3.   

    inner连接好为啥还要用子查询呢?
      

  4.   

    我执行代码之后出现以下错误提示:消息 4104,级别 16,状态 1,第 1 行
    无法绑定由多个部分组成的标识符 "T_penalty.bid"。
    消息 207,级别 16,状态 1,第 2 行
    列名 '罚款日期' 无效。
    消息 207,级别 16,状态 1,第 2 行
    列名 '罚款金额' 无效。
    是什么原因呢?
      

  5.   

    select (select rname from T_reader where rid=p.rid)as 读者姓名,
    (select bname from t_book where bid=p.bid) as 图书名称,pdate as 罚款日期,amount as 罚款金额
    from T_penalty as p
    如果你的连接查询能运行的话,这样也应该能运行.
      

  6.   

    inner join 如果用在大型数据上面的话,查询效率快的多,何必再用子查询啊
    笨啊
      

  7.   

    用 inner join 要好一点啊 楼主怎么想到用子查询啊