一SQL查询语句的条件部分Where b.TypeId=2 AND m.TypeId=b.Id AND m.UnitId=b1.Id AND b1.TypeId=3

来源:百度知道 编辑:UC知道 时间:2024/06/20 04:56:14
全句是"Select m.MedId,m.Flag,(CASE WHEN m.Flag=0 THEN '中药' ELSE '西药' END) AS 种类,m.MedName AS 药品称,m.TypeId,b.TypeName AS 类别,m.UnitId,b1.TypeName AS 单位,m.BuyPrice AS 进货价格,m.SalePrice AS 门诊价格,m.Total AS 库存数量 From Medicine m,BaseType b,BaseType b1Where b.TypeId=2 AND m.TypeId=b.Id AND m.UnitId=b1.Id AND b1.TypeId=3"要说查询结果中表m中的部分同时满足b.TypeId=2和b1.TypeId=3那时不可能的,我是一个SQL的初学者,请哪位懂得的人帮我一下。
对了,主要是想知道查询结果表m部分到底应该满足什么条件?
这个查询语句是从“医院信息管理系统”原代码中copy下来的,并且这个系统运行正常。
第一个回答者的查询思路我看不懂,好象m还得同时满足b.TypeId=2和b1.TypeId=3,这怎么可能,请求详细解释一下。

关键在于表与表之间的连接。
连接有左连接,右连接,内连接三种。你用的是内连接。
可以用先内连接,后左连接实现。

Select m.MedId,m.Flag,(CASE WHEN m.Flag=0 THEN '中药' ELSE '西药' END) AS 种类,m.MedName AS 药品称,m.TypeId,b.TypeName AS 类别,m.UnitId,b1.TypeName AS 单位,m.BuyPrice AS 进货价格,m.SalePrice AS 门诊价格,m.Total AS 库存数量 From Medicine m inner join BaseType b on m.TypeId=b.Id and b.TypeId=2 left join BaseType b1 on m.UnitId=b1.Id AND b1.TypeId=3

你这语句能用吗?B和B1是同一个表,而TypeId的值又等于2,又等于3,这哪能查出东西?如果你是想TypeId是2和3的都出来,那你要用OR
Select m.MedId,m.Flag,(CASE WHEN m.Flag=0 THEN '中药' ELSE '西药' END) AS 种类,m.MedName AS 药品称,m.TypeId,b.TypeName AS 类别,m.UnitId,b1.TypeName AS 单位,m.BuyPrice AS 进货价格,m.SalePrice AS 门诊价格,m.Total AS 库存数量 From Medicine m,BaseType b
WHERE (b.TypeId=2 OR B.TYPEID=3) AND m.TypeId=b.Id