查询多个SQL表

时间:2017-01-01 04:09:54

标签: mysql sql

我无法理解联接和子查询以及何时使用每个联接和子查询。我相信其中一个是合适的。

我有一个表(“所有者”)(为了简单起见)单位号码,姓名和电子邮件地址。

我有另一个单位号码表(“小工具”)和分配给每个单位的小工具数量。每个单元都有0,1或2个小部件。

我需要向每个单元发送一封电子邮件,具体取决于他们是否有0,1或2个小部件。换句话说(用简单的英语,甚至远程尝试半正确的SQL):

select numwidgets from widgets where unit=x
then where owners.unit = widgets.unit
select unit, name, email

我需要传递给我的脚本的数据如下所示:

unit     name          email               widgets
1        Bob Smith     bob@example.com     2

我可以在脑海中想象出我需要的数据,但它是从两个不同的表中提取它的问题。 “所有者”表是一个永久表,“小部件”表是用于跟踪我正在发送的电子邮件中正在处理的特定问题的临时表。我不需要发送电子邮件的帮助,只需创建我需要用来提取一封电子邮件的数据(numwidgets,name,email)的SQL。

感谢。

编辑:

输入数据:

owners table:
unit, name, email
1,Bob Smith, bob@example.com

widgets table:
unit,widgets
1,2

3 个答案:

答案 0 :(得分:0)

试试这个,只要两个表中的列之间存在匹配,内连接就会选择两个表中的所有行。

子查询(也称为内部查询或嵌套查询)是用于以多个步骤执行操作的工具。例如,如果您想获取多个列的总和,然后平均所有这些值,则需要在不同的步骤中执行每个聚合。

select owners.unit, name, email, widgets.numwidgets
from owners
inner join widgets On owners.unit = widgets.unit
where owners.unit = x

答案 1 :(得分:0)

我想你想要:

select o.*, w.widgets
from owners o
inner join widget w
on o.unit = w.unit
where o.unit = 123;

答案 2 :(得分:0)

对于您的情况,您需要内部联接。要理解你需要看到键的概念非常简单。 在您的表中,unitnumber是两个表中的公共列。因此,必须根据此列应用连接。

当一个查询的输出作为另一个查询的输入,即执行相关操作时,使用子查询

选择o.unit,o.name,o.email,w.numwidgets from owner o inner join widgets w on o.unit = w.unit where w.unit = X

在上面的查询中,根据您想要的结果传递X = 0,1,2

由于