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

Jes*_*per 11 sql sql-server select

我知道这可能是非常基本的,但我必须在他们在学校教这个时睡觉:)

如果我有两个表,例如:

表1(产品)

id
name
price
agentid
Run Code Online (Sandbox Code Playgroud)

表2(代理人)

userid
name
email
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的快速答案,但我忘记了SELECT WHERE price < 100.我如何加入例如products.agentid = agent.userid

Mos*_*cho 23

编辑支持价格过滤

您可以使用该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
Run Code Online (Sandbox Code Playgroud)

另一种方法是通过一个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
Run Code Online (Sandbox Code Playgroud)

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

  • 我建议不要使用第二种格式,原因有两个:(1)很容易意外地忽略连接标准,并想知道为什么你突然有笛卡尔积,(2)`INNER JOIN`格式让它变得容易从筛选条件中分离连接条件,使查询更容易为其他人解析. (2认同)

Mic*_*ski 6

这是一个非常简陋的问题INNER JOIN:

SELECT
  products.name AS productname,
  price,
  agent.name AS agentname
  email
FROM 
  products
  INNER JOIN agent ON products.agentid = agent.userid
Run Code Online (Sandbox Code Playgroud)

我建议您查看基本JOIN语法和概念.这里是微软文档的链接,虽然你上面提到的是标准的SQL.

请注意,INNER JOIN此处假设每个产品都具有agentid非NULL 的关联.如果有NULL agentidproducts,使用LEFT OUTER JOIN而不是无代理返回连产品.