我有一张桌子,其中一张卖家保存了他正在销售的产品的记录。在另一个表中买家保存他们需要购买的东西。
我需要从买家表中获取一个用户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
条款。可能我不应该加入两张桌子?我能做什么?
答案 0 :(得分:2)
LEFT JOIN
和JOIN
之间存在重要差异,或者更准确地说OUTER
和INNER
分别加入。
内部联接要求联接的两侧匹配。换句话说,如果你:
ON
与PersonId 使用LEFT (OUTER) JOIN
将返回所有人,即使是那些没有汽车的人。 INNER JOIN
只返回有车辆的人。
本文可能有所帮助:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html