来自三个表的SQL查询,使用第一个表的结果

问题描述:

我遇到了多个表的查询问题。我的平台是SQL。每个表格的前两列(ID,标签)相互关联。我正在尝试使用table1的结果从table2和table3中选择数据。来自三个表的SQL查询,使用第一个表的结果

Table1.ID, Tag, Top Weight, Bottom Weight, Total WeightTable2.ID, Tag, Color, Shade, Tint, TransparancyTable3.ID, Tag, Sequence, Length, Width, Height

表1被用于确定所述ID和Tag。 ID和标签的组合对于此表格是唯一的。 table1中没有空值。在这个例子中,我将使用顶部重量和底部重量搜索ID和标签。但是,可以使用任意数量的标准来查找ID和标签。

SELECT ID, Tag FROM table1 WHERE Top Weight = '22' AND Bottom Weight = '44' 

Table1 query results

我想借此从表1的ID和标签的结果,并用它们为我的表2和表3的查询。对于表2,前两列(ID,标签)的组合是唯一的。我想从此表中选择颜色,阴影和色调。这些列可以有空值。对于表3,前三列(ID,标签,序列)的组合是唯一的。我想从此表中选择序列,长度和宽度。这些列也可以具有空值。

是否可以将所有三个表合并为一个查询,并使用第一个表的结果来获取第二个和第三个表的结果?示例表只有14行,但实际上有成千上万行 - 因此性能至关重要(何时不是?)。我期待着您的回复,谢谢。

+0

对不起 - 这是SQL Server中。我正在玩MS Access的屏幕截图。 –

这看起来像一个相当简单的外连接查询:

select t1.id, t1.tag, 
     t2.Color, t2.Shade, t2.Tint, 
     t3.Sequence, t3.Length, t3.Width 
from table1 t1 
left join table2 t2 on t1.id = t2.id and t1.tag = t2.tag 
left join table3 t3 on t1.id = t3.id and t1.tag = t3.tag 
WHERE t1.[Top Weight] = '22' AND t1.[Bottom Weight] = '44' 
+0

感谢@Mark - 是否有可能使用子查询作为替代解决方案? –

+0

是的,你可以,但不建议。 – mee

+0

@JohnK:正如卡托纳所说,你可以但它不是一个好主意。你为什么想要?你想看看t2的结果在单独的行到t3的结果吗? –