SQL连接mulitple where条件

时间:2017-04-10 19:18:39

标签: sql tsql

我有一个看起来像这样的表:

[Jobs]
+-----+-------+---------+
+ ID  + Title +  Active +
+-----+-------+---------+
+ 1   + Admin +     0   +
+-----+-------+---------+
+ 2   + Mgr   +     1   +
+-----+-------+---------+
+ 3   + Emp   +     0   +
+-----+-------+---------+

[JobsTxt]
+-------+-------+---------+
+ JobID + Text  +  Type   +
+-------+-------+---------+
+ 1     + test  +   1     +
+-------+-------+---------+
+ 1     + test2 +   1     +
+-------+-------+---------+
+ 1     + test3 +   2     +
+-------+-------+---------+
+ 3     + test  +   1     +
+-------+-------+---------+

我想编写一个查询,它为JobsTxt表中的Jobs条目提供了Jobs表中的Type = 1和Active = 0,其中JobsTxt.JobID = Jobs.ID

所以它会像:

Select [JobsTxt].Text from [JobsText] left join [Jobs] on [JobsTxt].JobId = [Jobs].ID where [JobsTxt].Type = 1 and [Jobs].Active = 0

我很喜欢这样的加入和查询,所以感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

请原谅,我不能直接就你的问题发表评论。所以,让我把它放在这里,即使我认为这可能不符合答案。

对我来说,你的SQL语句看起来非常好,应该提供你所描述的内容。也许你可以帮助我们,并提供一些有关所涉及的SQL方言的信息(即你正在运行的数据库系统和版本)?

修改 看来你确实有一个错字:

[...] from [JobsText] [...]
                 ↑ - should there be an 'e'?

谢谢。

答案 1 :(得分:0)

如果您不需要JOIN,则EXISTS很好,这意味着您只需要其中一个表中的字段。

SELECT jt.Text
FROM   [JobsText] jt
WHERE  jt.Type = 1 
       AND EXISTS
    (
        SELECT 1
        FROM   [Jobs] j
        WHERE  j.ID = jt.JobID
               AND j.Active = 0
    );

答案 2 :(得分:0)

请使用以下查询:

    DECLARE @Jobs TABLE (ID INT, Title VARCHAR(10), Active BIT )
    INSERT INTO @Jobs VALUES
    (1,'Admin',0),
    (2,'Mgr',1),
    (3,'Emp',0)


    DECLARE @Jobtxt TABLE ( JobID INT, [Text] VARCHAR(10), [Type] INT)
    INSERT INTO @Jobtxt VALUES
    (1,'test',1),
    (1,'test2',1),
    (1,'test3',2),
    (3,'test',1)


    SELECT 
        Jt.JobID,Jt.[Text] 
    FROM 
        @Jobtxt Jt INNER JOIN @Jobs J ON Jt.JobID = J.ID
    WHERE 
        J.Active = 0 AND Jt.[Type] =1