如何在第一次选择中使用第二个选择的结果

时间:2013-02-07 21:13:54

标签: sql sql-server sql-server-2012

我正在尝试使用第二个SELECT获取一些ID,然后在第二个SELECT中使用该ID,我不知道如何。

SELECT Employee.Name 
FROM Emplyee, Employment 
WHERE x = Employment.DistributionID 
(SELECT Distribution.DistributionID FROM Distribution 
       WHERE Distribution.Location = 'California') AS x

这篇文章很长,但这里有一个简短的“提示”

虽然我的select的语法很糟糕,但逻辑却不是。不知怎的,我需要那个“x”。因此,第二个select是最重要的。然后我必须在第一个select内使用“x”。我只是不知道如何

/提示

这是我唯一可以想象的,我在Sql上很新,我想在练习之前我需要一本书,但是现在我已经开始了,我想完成我的小程序。

修改

好的,我抬头加入,仍然没有得到它

SELECT Employee.Name 
    FROM Emplyee, Employment 
    WHERE x = Employment.DistributionID 
    LEFT JOIN Distribution ON
    (SELECT Distribution.DistributionID FROM Distribution 
           WHERE Distribution.Location = 'California') AS x

ASLeft

获取错误消息

我使用名称从上面的红色找到ID,我使用我在下表中找到FROM upper red的ID。然后我将我找到的ID与Green匹配。我使用绿色ID来查找相应的名称

enter image description here

我有California作为C#的输出数据。我想使用California来查找DistributionID。我使用DistributionID查找EmployeeID。我使用EmployeeID来查找名称

我的逻辑:

Parameter: Distribution.Name (from C#)

Find DistributionID that has Distribution.Name
Look in Employment WHERE given DistributionID 
      reveals Employees that I am looking for (BY ID)
Use that ID to find Name
      return Name

表格:

注意:在此示例图片中,Employee因select而重复,它们实际上是单数

在“Locatie”(中间表)是Location,我从C#获得位置(再次),我以California为例。我需要首先找到ID

enter image description here

Sory他们不是英文,但这里是创建表:

enter image description here

3 个答案:

答案 0 :(得分:2)

试试这个解决方案:

DECLARE @pLocatie VARCHAR(40)='Alba'; -- p=parameter

SELECT a.AngajatID, a.Nume
FROM Angajati a
JOIN Angajari j ON a.AngajatID=j.AngajatID
JOIN Distribuire d ON j.DistribuireID=d.DistribuireID
WHERE d.Locatie=@pLocatie

您应该在Angajari表(就业)上添加一个唯一键:

ALTER TABLE Angajari
ADD CONSTRAINT IUN_Angajari_AngajatID_DistribuireID UNIQUE (AngajatUD, DistribuireID);

这样可以防止重复(AngajatID, DistribuireID)

答案 1 :(得分:2)

试试这个:

SELECT angajati.Nume 
FROM angajati 
JOIN angajari  ON angajati.AngajatID = angajari.AngajatID
JOIN distribuire ON angajari.distribuireid = distribuire.distribuireid
WHERE distribuire.locatie = 'california'

由于您有一个将员工映射到其分发位置的表,您只需要在中间加入该表以创建映射。如果您喜欢WHERE子句,则可以使用变量,以便可以将其作为存储过程或C#代码输出中的任何内容调用。

答案 2 :(得分:0)

我不知道你是如何连接Emplyee(原文如此?)和Employment,但你想使用连接来连接两个表,并在连接中指定表的相关方式。连接通常在具有别名时看起来最佳,因此您不必重复整个表名。以下查询将从就业和分配表中获取分配位置等于加利福尼亚州的所有信息。您也可以加入员工就业以获得姓名。

SELECT *
FROM Employment e
JOIN Distribution d on d.DistributionID = e.DistributionID
WHERE d.Location = 'California'

这将返回两个表的内容。要选择特定记录,请使用别名。[Col_Name]在select语句中用逗号分隔,例如d.DistributionID从分发表中返回DistributionID