Sql使用另一个表值选择

时间:2014-01-10 14:04:16

标签: sql select

基本上我的桌子很像下面的图片。

enter image description here

首先,我通过给定的CustomerID获得SaleOrderID:

Select 
    SaleOrderID 
From tblSaleOrder  
where CustomerID = 512992

返回,1002,1003,1005,1009

我想使用这些数字来选择tblSaleOrderDetail:

Select 
    * 
from tblSaleOrderDetail 
where SaleOrderID = 1002,1003,1005,1009

(来自其他查询的值)

我需要有关查询的建议,以使用来自其他选择的值。有没有办法创建数组来保存值,然后将其用于另一个查询?或者更简单的方法!

3 个答案:

答案 0 :(得分:4)

in子句中使用子选择:

select * 
from tblSaleOrderDetail 
where SaleOrderID in (
    select SaleOrderID
    from tblSaleOrder  
    where CustomerID = 512992)

在in子句中使用subselect时,请记住您只能在子选择中选择一列。

您还可以执行加入:

   select *
   from tblSaleOrderDetail sod
   join tblSaleOrder so
   on sod.SaleOrderId = so.SaleOrderId
   where so.CustomerID = 512992

答案 1 :(得分:3)

这是一个非常基本的SQL操作,称为join。虽然您可以将in用于此目的,但更典型的方法是:

select sod.*
from tblSaleOrder so join
     tblSaleOrderDetail sod
     on so.SaleOrderID = sod.SaleOrderID
where so.CustomerID = 512992;

如果您正在学习SQL,join操作是您应该学习的第一件事。

答案 2 :(得分:1)

这个帖子可能有点过分,因为问题相当基本,但我想给你一个选项列表以及一些基本建议。最简单的方法之一是使用IN子句。 IN子句在概念上非常类似于=,除了它查找项列表。

示例

Select 
    * 
from tblSaleOrderDetail 
where SaleOrderID IN
    (
    Select 
        SaleOrderID 
    From tblSaleOrder  
    where CustomerID = 512992
    )

另一种实现此目的的方法是使用EXISTS。这非常类似于它检查另一个表中存在的行的声音。

Select 
    * 
from tblSaleOrderDetail AS SOD
where  EXISTS
    (
    Select 
        1 
    From tblSaleOrder  AS SO
    where CustomerID = 512992
    AND SOD.SaleOrderID = SO.SaleOrderID
    )

注意我如何使用AS SO和SOD为这些表提供新名称。这称为别名,它是你的朋友。我强烈建议您在将来的查询中使用它。

你也可以使用JOIN但是当我开始写这篇文章的时候已经有了一个例子。