web-dev-qa-db-fra.com

Combinaison de deux tables dans Select (SQL Server 2008)

Je sais que c'est probablement très basique, mais j'ai dû dormir quand ils ont appris ça à l'école :)

Si j'ai deux tables, comme ceci par exemple:

Tableau 1 (produits)

id
name
price
agentid

Tableau 2 (agent)

userid
name
email

Comment puis-je obtenir un ensemble de résultats de produits comprenant le nom et l'adresse de messagerie de l'agent, ce qui signifie que products.agentid = agent.userid

Merci pour vos réponses rapides, mais j'ai oublié WHERE. Comment puis-je rejoindre par exemple SELECT WHERE price < 100

9
Jesper

Edité pour supporter le filtre de prix

Vous pouvez utiliser la clause INNER JOIN pour joindre ces tables. C'est fait comme ça:

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

Une autre façon de faire est d'utiliser une clause 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

Notez que dans le second cas, vous créez un produit naturel de toutes les lignes des deux tables, puis vous filtrez le résultat. Dans le premier cas, vous filtrez directement le résultat tout en rejoignant la même étape. Le SGBD comprendra vos intentions (quelle que soit la façon dont vous choisirez de résoudre ce problème) et les traitera le plus rapidement possible.

21
Mosty Mostacho

Ceci est un INNER JOIN très rudimentaire:

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

Je recommande de revoir la syntaxe et les concepts de base JOIN. Voici un lien vers la documentation de Microsoft , bien que ce que vous avez ci-dessus soit assez universel comme SQL standard.

Notez que le INNER JOIN suppose ici que chaque produit est associé à une agentid qui n'est pas NULL. S'il existe NULL agentid dans products, utilisez plutôt LEFT OUTER JOIN pour renvoyer même les produits sans agent.

6
Michael Berkowski

Ceci est ma jointure pour des tables légèrement plus grandes dans Prod.Hope ça aide.

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;
1
Vikram K
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)
1
Thit Lwin Oo
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
0
John Dewey