一个关于order by的sql语句问题
我有两个表,GoodsIn和Goods,GoodsIn里面的GoodsId作为外键关联Goods的主键GoodsIdGoodsIn(入库单)里面包含GoodsInIdGo...
我有两个表,GoodsIn和 Goods,GoodsIn 里面的 GoodsId作为外键关联Goods的主键GoodsId
GoodsIn(入库单)里面包含 GoodsInId GoodsId inputTime等信息
Good(物品单)包含 GoodsId GoodsName 等信息
我现在想要从GoodsIn 表中查询在入库单中GoodId=x 或者=y 的入库单信息
要求查询的结果为 GoodInId
GoodId inputTime GoodsName
所以我的语句为SELECT DISTINCT
GoodsInId,InputTime,GoodsId.GoodsName,GoodsId FROM Goods AS GoodsId, GoodsIn
WHERE GoodsIn.GoodsId=GoodsId(这里的GoodsId是外键别名,连接到Good表).GoodsId AND 1=1
AND GoodsIn.GoodsId = x OR GoodsIn.GoodsId = y ORDER BY GoodsIn.GoodsInId DESC
现在结果是查询出来正确了,可是排序有问题,同一个goodInid的信息可能会分成多条记录
我想要的结果是这样
入库表里面的信息由
GoodsInId GoodId InputTime
1 a 2012
2 aa 2013
3 bb 2012
Good表的信息为
GoodId GoodsName
a A
aa AA
bb BB
想要查询goodsId=a or goodsId=aa 的记录
按理说查询出的结果是
GoodInId GoodId GoodName Inputtime
1 a A 2012
2 aa AA 2012
但是现在的结果查出来是
1 a A 2012
1 aa AA 2012
1 bb BB 2012
2 aa AA 2013
不知道是哪里出了错
我试了一下,把外键删除不查询整个结果就是正确的 展开
GoodsIn(入库单)里面包含 GoodsInId GoodsId inputTime等信息
Good(物品单)包含 GoodsId GoodsName 等信息
我现在想要从GoodsIn 表中查询在入库单中GoodId=x 或者=y 的入库单信息
要求查询的结果为 GoodInId
GoodId inputTime GoodsName
所以我的语句为SELECT DISTINCT
GoodsInId,InputTime,GoodsId.GoodsName,GoodsId FROM Goods AS GoodsId, GoodsIn
WHERE GoodsIn.GoodsId=GoodsId(这里的GoodsId是外键别名,连接到Good表).GoodsId AND 1=1
AND GoodsIn.GoodsId = x OR GoodsIn.GoodsId = y ORDER BY GoodsIn.GoodsInId DESC
现在结果是查询出来正确了,可是排序有问题,同一个goodInid的信息可能会分成多条记录
我想要的结果是这样
入库表里面的信息由
GoodsInId GoodId InputTime
1 a 2012
2 aa 2013
3 bb 2012
Good表的信息为
GoodId GoodsName
a A
aa AA
bb BB
想要查询goodsId=a or goodsId=aa 的记录
按理说查询出的结果是
GoodInId GoodId GoodName Inputtime
1 a A 2012
2 aa AA 2012
但是现在的结果查出来是
1 a A 2012
1 aa AA 2012
1 bb BB 2012
2 aa AA 2013
不知道是哪里出了错
我试了一下,把外键删除不查询整个结果就是正确的 展开
4个回答
展开全部
DISTINCT 在去重复是将重复的行合并,你的GoodsIn 记录中,通一个GoodId会在不同时间都有入库记录,那么,在返回的记录中,GoodId会重复,但是和GoodsInId,InputTime交叉后,这行数据就与其他行不同了,所以不会被合并。
关键是你返回的结果需要的是什么?是入库的最后一条记录?还是说其他的?
请标识你返回结果的意义才能继续分析。
关键是你返回的结果需要的是什么?是入库的最后一条记录?还是说其他的?
请标识你返回结果的意义才能继续分析。
追问
麻烦看问题补充
追答
--用条件or的时候,要括号括起来,否则之前And条件都无效的,所以导致笛卡尔积的处理,注意: (GoodsIn.GoodsId = x OR GoodsIn.GoodsId = y )加括号就可以了
SELECT DISTINCT
GoodsInId,InputTime,GoodsId.GoodsName,GoodsId FROM Goods AS GoodsId, GoodsIn
WHERE GoodsIn.GoodsId=GoodsId.GoodsId AND 1=1
AND (GoodsIn.GoodsId = x OR GoodsIn.GoodsId = y )ORDER BY GoodsIn.GoodsInId DESC
-----补充问题前后表的字段名称不一致,修改时注意一致的就可以了。
展开全部
SELECT g.Goodslnld,g.InputTime,Goodsld.GoodsName,Goodsld.Goodld FROM Goodsln as g
INNER JOIN (SELECT GoodId,GoodsName FROM Goods WHERE GoodId=X OR GoodId=Y)
) AS Goodsld ON g.Goodsld=Goodsld.GoodId
ORDER BY g.Goodslnld
你看你前后问题和补充字段名都不一样·一会Good表 GoodsId 补充里又GoodId
INNER JOIN (SELECT GoodId,GoodsName FROM Goods WHERE GoodId=X OR GoodId=Y)
) AS Goodsld ON g.Goodsld=Goodsld.GoodId
ORDER BY g.Goodslnld
你看你前后问题和补充字段名都不一样·一会Good表 GoodsId 补充里又GoodId
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-07-29
展开全部
因为是不同时间录入的 GoodsInId,InputTime去掉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想做嘛?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询