我用的是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分也送你了
数据库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分也送你了
解决方案 »
- C#中点名系统
- 关于DataList
- 这个问题如何解决
- 在winForm里怎样把图片保存到Sql Server数据库
- C# 关于SQL查询语句
- 如何解决在Windows 2003 Server系统下的访问Asp程序?
- 求中国手机号码正则表达式!
- [求教]关于DataGrid绑定到数组的问题~~~`[在线等待]
- 各位大佬,我想问C#适不适合开发MIS,在这方面,跟DELPHI比如何?因为听说它跟VB一样简单??
- VS2010编译过的程序 用VS2008打开 提示需要DotNet Framework4.0框架才能运行
- 在窗口界面想设一个回车执行控键,回车后连接SOL数据库,怎么弄啊。谢谢!
- 大家来看看这段代码的运行结果是多少?
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 的后面, 如上所示.
FROM Procs
LEFT JOIN TypeA ON Procs.TypeA = TypeA.ID
LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID
FROM Procs LEFT JOIN TypeA ON Procs.TypeA = TypeA.ID LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID
语法错误 (操作符丢失) 在查询表达式 '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' 中。
FROM Procs
LEFT JOIN TypeA ON Procs.TypeA = TypeA.ID
LEFT JOIN TypeB ON Procs.TypeB = TypeB.ID天哪,这样的语句我只能用一个Left Join,用两个或以上就出现这错误,怎么回事啊?
FROM Procs
left join TypeA on TypeA.id=Procs.id
left join TypeB on TypeB.id=Procs.id
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的行.
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 数据库中确实不能工作.
FROM TypeB B
RIGHT JOIN (TypeA A RIGHT JOIN Procs P ON A.ID = P.TypeA)
ON B.ID = P.TypeB
如果在Procs表中没有重复纪录的话,
搂主原来的“WHERE Procs.TypeA = TypeA.ID AND Procs.TypeB = TypeB.ID”方法
并不会出现重复纪录。用外连接的方法能够查询出Procs表中存在,但在TypeA或者TypeB表中不存在的纪录,
不知道搂主到底什么样的需求呢?
FROM Procs Procs
inner JOIN TypeA TypeA
ON Procs.TypeA = TypeA.ID
inner JOIN TypeB TypeB
ON Procs.TypeB = TypeB.ID