日期:2014-05-18  浏览次数:20470 次

两表查询

A1表 :  
  PO号,产品编号,产品数量,客户名称,交货期,  

B2表 :产品编号,产品名称,生产部门,生产工价1,生产工价2

要想查询出

  PO号,产品编号,产品名称,产品数量,客户名称,交货期,生产部门,生产工价1,生产工价2

如何查询:
   
  我用
  selecet distinct a.PO号,a.产品编号,b.产品名称,a.产品数量,a.客户名称,a.交货期,a.生产部门,a.生产工价1,a.生产工价2 from gongdan a,bom0 b where a.产品编号=b.产品编号
  查询出的结果不符合实际, 结果好象是进行联合查询一样(得到的结果行数是:把两表的行数相乘了),为何???
要如何写才是正确的?
 
  还要有一个问题就是:我想在下面语句的结果集中,
  SELECT TOP (100) PERCENT b.gongdah, a.cpbhao FROM dbo.bom0 AS a INNER JOIN dbo.gongdan AS b ON a.cpbhao = b.cpbhao WHERE (a.ssbumen = '喷油部') ORDER BY a.cpbhao, a.ssbumen 再继续想查找出:
  select a.cpbhao,a.ssbumen,a.cpmc,a.gongxumc,a.gongjiaxj,a.xgongshi,b.gongdah,b.oc#,b.po#,b.kehu,b.shuliang,b.jiaohuoqi from bom0 a,gongdan b where a.cpbhao=b.cpbhao order by a.cpbhao,a.ssbumen
   
  如何实现??能否用一条语句搞掂....


------解决方案--------------------
SELECT .... FROM (SELECT **** FROM****) AS B WHERE B.>..
------解决方案--------------------
没有关联才会笛卡尔积的吧。
------解决方案--------------------
二楼给你的结果没有错,你说的二个相乘了,是因为你二个表是N:N的关系。
不是1:N或N:1的关系。
你检查你的表中,估计是你的A1表和2表二个表中的关联字段有重复没满足1:N或N:1关系
------解决方案--------------------
第二个问题,我看不出你的语句
SELECT TOP (100) PERCENT b.gongdah, a.cpbhao FROM dbo.bom0 AS a INNER JOIN dbo.gongdan AS b ON a.cpbhao = b.cpbhao WHERE (a.ssbumen = '喷油部') ORDER BY a.cpbhao, a.ssbumen 再继续想查找出:
和语句
select a.cpbhao,a.ssbumen,a.cpmc,a.gongxumc,a.gongjiaxj,a.xgongshi,b.gongdah,b.oc#,b.po#,b.kehu,b.shuliang,b.jiaohuoqi from bom0 a,gongdan b where a.cpbhao=b.cpbhao order by a.cpbhao,a.ssbumen

之间有什么必然的联系.它们既然是从同样的两个表中进行的查询,连接字段又相同,为什么要说是从上一句"继续查找出"下一句的内容呢?它们查的列不同,条件不同,特别是,上一句查找的列比下一句少很多,怎么能从上一句进一步找到更多的内容呢?
另外,很好奇的是,上一句是用 inner join on...来连接的,而下一句却用 a,b where ...=...来连接,本来就是两种不同的编程风格,应该是弄不到一块去的.