如果我有两个表,例如:
表1(产品)
id
name
price
agentid
表2(代理人)
userid
name
email
如何从包含代理商名称和电子邮件的产品中获取结果集,这意味着products.agentid = agent.userid
?
我如何加入例如SELECT WHERE price < 100
?
答案 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