在SQL Server中查找两个不同表的匹配记录

时间:2013-09-20 06:43:51

标签: sql-server

我有一张桌子,其中一张卖家保存了他正在销售的产品的记录。在另一个表中买家保存他们需要购买的东西。

我需要从买家表中获取一个用户ID列表(uid字段),该列表与sales表上的特定产品相匹配。这就是我写的:

select n.[uid] 
from needs n 
  left join ads(getdate()) a 
         on n.mid=a.mid 
        and a.[year] between n.from_year and n.to_year 
        and a.price between n.from_price and n.to_price 
        and n.[uid]=a.[uid] 
        and a.pid=n.pid

我需要使用where子句来消除那些不匹配的记录。因为我认为所有这些条件都是用ON定义的,必须用where子句定义。但加入需要至少一个ON条款。可能我不应该加入两张桌子?我能做什么?

1 个答案:

答案 0 :(得分:2)

LEFT JOINJOIN之间存在重要差异,或者更准确地说OUTERINNER分别加入。

内部联接要求联接的两侧匹配。换句话说,如果你:

  • 有一张代表人物的表
  • 你有另一张代表汽车的表
  • 并且每辆汽车都有一个PersonId
  • 并使用ON与PersonId
  • 联合使用这些表格

使用LEFT (OUTER) JOIN将返回所有人,即使是那些没有汽车的人。 INNER JOIN只返回有车辆的人。

本文可能有所帮助:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html