在Select中组合两个表(SQL Server 2008)

时间:2012-02-16 03:07:51

标签: sql sql-server select

如果我有两个表,例如:

表1(产品)

id
name
price
agentid

表2(代理人)

userid
name
email

如何从包含代理商名称和电子邮件的产品中获取结果集,这意味着products.agentid = agent.userid

我如何加入例如SELECT WHERE price < 100

6 个答案:

答案 0 :(得分:21)

已修改为支持价格过滤器

您可以使用INNER JOIN子句加入这些表。它是这样做的:

select p.id, p.name as ProductName, a.userid, a.name as AgentName
from products p
inner join agents a on a.userid = p.agentid
where p.price < 100

另一种方法是通过WHERE子句:

select p.id, p.name as ProductName, a.userid, a.name as AgentName
from products p, agents a
where a.userid = p.agentid and p.price < 100

请注意,在第二种情况下,您将从两个表中生成所有行的自然产品,然后过滤结果。在第一种情况下,您在同一步骤中加入时直接过滤结果。 DBMS将了解您的意图(无论您选择何种方式解决此问题)并以最快的方式处理它。

答案 1 :(得分:6)

这是一个非常简陋的INNER JOIN

SELECT
  products.name AS productname,
  price,
  agent.name AS agentname
  email
FROM 
  products
  INNER JOIN agent ON products.agentid = agent.userid

我建议您查看基本的JOIN语法和概念。 Here's a link to Microsoft's documentation,尽管上面的内容非常普遍,但却是标准的SQL。

请注意,此处INNER JOIN假设每个产品都有一个不为NULL的关联agentid。如果agentid中存在NULL products,请使用LEFT OUTER JOIN代替返回没有代理的产品。

答案 2 :(得分:1)

select p.name productname, p.price, a.name as agent_name, a.email
from products p
inner join agent a on (a.userid = p.agentid)

答案 3 :(得分:1)

这是我对Prod.Hope稍微大一点的表的加入。它有帮助。

SELECT TOP 1000 p.[id]
      ,p.[attributeId]
      ,p.[name] as PropertyName
      ,p.[description]
      ,p.[active],
      a.[appId],
      a.[activityId],
      a.[Name] as AttributeName 
  FROM [XYZ.Gamification.V2B13.Full].[dbo].[ADM_attributeProperty] p
  Inner join [XYZ.Gamification.V2B13.Full].[dbo].[ADM_activityAttribute] a
  on a.id=p.attributeId
  where a.appId=23098;

答案 4 :(得分:0)

select ProductName=p.[name]
, ProductPrice=p.price
, AgentName=a.[name]
, AgentEmail=a.email
from products p
inner join agent a on a.userid=p.agentid

答案 5 :(得分:0)

如果您不想使用内部联接(或没有可能这样做!)并合并行,则可以使用交叉联接:

SELECT *
FROM table1
CROSS JOIN table2

或者简单地

SELECT *
FROM table1, table2