2

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

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

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子句。可能我不应该加入两张桌子?我能做些什么?

4

1 回答 1

2

LEFT JOIN和之间有一个重要的区别JOIN,或者更准确地说OUTERINNER分别连接。

内连接要求连接的双方都匹配。换句话说,如果您:

  • 有一张代表人物的桌子
  • 你有另一个代表汽车的表格
  • 每辆车都有一个 PersonId
  • ON并使用PersonId加入这些表

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

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

于 2013-09-20T06:54:17.050 回答