我用的是Access
数据库Procs:
id      Pname     TypeA      TypeB数据库TypeA:
id     Tname数据库TypeB;
id     Tname这样三个表,由于在Procs表中的TypeA,TypeB字端代表相应表中的内容,我想在Select Procs表中内容时,TypeA,TypeB字缎显示相应TypeA,TypeB表中的名称,请问SQL语句怎么写?
string sqlShow = "
SELECT Procs.ID, Procs.Pname, TypeA.TypeName, TypeB.TypeName
FROM Procs, TypeA, TypeB
WHERE Procs.TypeA = TypeA.ID AND Procs.TypeB = TypeB.ID这种方法就不要了,因为发现无古多出几条记录
解决的:http://community.csdn.net/Expert/topic/4255/4255820.xml?temp=6.223696E-02
这里40分也送你了

解决方案 »

  1.   


    string sqlShow = @"
    SELECT P.ID, P.Pname, A.TypeName, B.TypeName
    FROM Procs P, TypeA A, TypeB B
    WHERE (P.TypeA = A.ID) AND (P.TypeB = B.ID)
      AND (P.ID BETWEEN 1 AND 5)
    ";Access 数据库就是这样用, 没问题的, 如果还有其他限制条件, 继续加在 WHERE 的后面, 如上所示.
      

  2.   

    SELECT Procs.ID, Procs.Pname, TypeA.TypeName, TypeB.TypeName
    FROM Procs
      LEFT JOIN TypeA ON Procs.TypeA = TypeA.ID
      LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID
      

  3.   

    SELECT Procs.ID, Procs.Pname, TypeA.TypeName, TypeB.TypeName
    FROM Procs   LEFT JOIN TypeA ON Procs.TypeA = TypeA.ID  LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID
      

  4.   

    cdo(VC?我才刚学) :
    语法错误 (操作符丢失) 在查询表达式 'Procs.TypeA = TypeA.ID LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID' 中。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 语法错误 (操作符丢失) 在查询表达式 'Procs.TypeA = TypeA.ID LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID' 中。
      

  5.   

    SELECT Procs.ID, Procs.Pname, TypeA.TypeName, TypeB.TypeName
    FROM Procs
      LEFT JOIN TypeA ON Procs.TypeA = TypeA.ID
      LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID天哪,这样的语句我只能用一个Left Join,用两个或以上就出现这错误,怎么回事啊?
      

  6.   

    SELECT Procs.ID, Procs.Pname, TypeA.TypeName, TypeB.TypeName
    FROM Procs 
    left join TypeA on TypeA.id=Procs.id
    left join TypeB on TypeB.id=Procs.id
      

  7.   

    问一下,以上各位用left join的是不是用Access的?
      

  8.   

    sql里面是没问题的 access语法不是很熟,好像有些差别的
      

  9.   

    string sqlShow = @"
    SELECT P.ID, P.Pname AS 名称, A.Tname AS 大类, B.Tname AS 小类
    FROM Procs P, TypeA A, TypeB B
    WHERE (P.TypeA = A.ID) AND (P.TypeB = B.ID)
      AND (P.ID BETWEEN 1 AND 5)
    ";这种方法就不要了, 因为发现无故多出几条记录
    ---------------------------------------------不可能会多出记录来的, 较之 LEFT JOIN 的版本倒是有可能少掉, 如果有表Procs:
    ID Pname TypeA TypeB
     1  电视     1    11
     2  手机     2    21表TypeA
    ID Tname
     1  家电
     2  通讯表TypeB
    ID Tname
    11  影音查询结果将是:ID 名称 大类 小类
     1 电视 家电 影音表Procs中的第2行将不会出现在查询结果中, 因为表TypeB中没有ID为21的行, 解决办法是在表TypeB中添加ID为21的行.
      

  10.   

    string sqlShow = @"
    SELECT P.ID, P.Pname AS 名称, A.Tname AS 大类, B.Tname AS 小类
    FROM Procs P
      LEFT JOIN TypeA A ON P.TypeA = A.ID
      LEFT JOIN TypeB B ON P.TypeB = B.ID
    ";我试了一下, 这个语句在 SQL Server 2000 中工作正常, 在 Access 数据库中确实不能工作.
      

  11.   

    经测试, 下面这个查询语句在 Access 中可以正常工作:SELECT P.ID, P.Pname AS 名称, A.Tname AS 大类, B.Tname AS 小类
    FROM TypeB B
      RIGHT JOIN (TypeA A RIGHT JOIN Procs P ON A.ID = P.TypeA)
      ON B.ID = P.TypeB
      

  12.   

    同意 wuyi8808(tm) studio 2005  的观点!
    如果在Procs表中没有重复纪录的话,
    搂主原来的“WHERE Procs.TypeA = TypeA.ID AND Procs.TypeB = TypeB.ID”方法
    并不会出现重复纪录。用外连接的方法能够查询出Procs表中存在,但在TypeA或者TypeB表中不存在的纪录,
    不知道搂主到底什么样的需求呢?
      

  13.   

    SELECT Procs.ID, Procs.Pname, TypeA.TypeName, TypeB.TypeName
    FROM Procs Procs
      inner JOIN TypeA TypeA
        ON Procs.TypeA = TypeA.ID
      inner JOIN TypeB TypeB
        ON Procs.TypeB = TypeB.ID