从另一个选择语句中选择结果

时间:2017-08-02 22:06:53

标签: sql sql-server

我有2个SQL语句。我需要一个根据另一个选择来选择结果。这些表格无关。唯一的关系是初始选择的结果。

初步选择......

SELECT 
    relatedseries 
FROM RelatedItems 
WHERE series = @getseries 
ORDER BY ID

根据上述选择结果进行选择......

SELECT 
    picid, 
    description 
FROM product_series 
WHERE newseries = relatedseries

我知道这是不正确的,部分是因为我已经尝试过,但大多数情况下我确信语法不正确。但是例如....

SELECT 
    picid, 
    description 
FROM product_series 
WHERE newseries = (
    SELECT 
        relatedseries 
    FROM RelatedItems 
    WHERE series = @getseries ORDER BY ID
)

如何重写此功能并仍能达到我要求的效果?

6 个答案:

答案 0 :(得分:0)

对于两个问题,所有人都不错,尽管错误信息应该很容易理解。

  1. 您不能在嵌套的ORDER BY语句中使用SELECT子句。尝试删除该部分。
  2. 此外,如果您的嵌套查询返回的结果超过1,则在该查询之前不能有等号 - 将其替换为IN。
  3.   

    更正了查询

    SELECT 
        picid, 
        description 
    FROM product_series 
    WHERE newseries IN (
        SELECT 
            relatedseries 
        FROM RelatedItems 
        WHERE series = @getseries 
        --ORDER BY ID
    )
    

答案 1 :(得分:0)

您可以使用IN获取第一个查询的多个结果

SELECT picid, 
       description 
  FROM product_series
 WHERE newseries IN (SELECT relatedseries 
                       FROM RelatedItems 
                      WHERE series = @getseries
                    )
 ORDER BY picid;

答案 2 :(得分:0)

你可以用存在

来做到这一点
SELECT picid, description FROM product_series WHERE newseries = relatedseries
Where 
exists (SELECT 1FROM RelatedItems WHERE series = @getseries ORDER BY ID)

答案 3 :(得分:0)

使用JOIN而不是2个查询。

SELECT p.picid, p.description, r.relatedseries 
FROM product_series p
INNER JOIN RelatedItems r ON p.newseries = r.relatedseries
    AND r.series = @getseries 

尽可能少地获取您需要的数据。

注意:如果您在RelatedItems中有多个匹配product_series的记录,则可能会给您重复的p.picid和p.description。

答案 4 :(得分:0)

我认为你最好的选择是使用加入

stride of 1

这是一个示例sql join

答案 5 :(得分:0)

SELECT NS.picid, NS.description 
FROM product_series NS, 
(SELECT relatedseries FROM RelatedItems WHERE
series = @getseries) RI
WHERE NS.newseries = RI.relatedseries
ORDER BY NS.picid ASC