连接两个表,然后从第三个表中提取不匹配的记录

时间:2011-05-10 19:06:07

标签: sql join records

我有Visual Studio 2005,我在VB中编写代码,而不是C +。我需要一个Select语句,并且发现了一些很接近但不适合我的情况。我有三张桌子:

PROJECT
    [Projnum]
    [ShipDate] 

CUSTOMER
    [Projnum]
    [Jobnum]

TAGS
    [Jobnum] 

我需要加入CUSTOMER和PROJECT,所以我知道PROJECT.ShipDate为空的所有CUSTOMER.Jobnum记录。在这些记录中,我需要从TAGS.Jobnum获得哪些记录不匹配。

非常感谢任何帮助。谢谢你,查克。

3 个答案:

答案 0 :(得分:0)

SELECT c.Jobnum
    FROM customer c
        INNER JOIN project p
            ON c.Projnum = p.Projnum
    WHERE p.ShipDate IS NULL
        AND NOT EXISTS(SELECT NULL FROM tags t WHERE t.Jobnum = c.Jobnum)

答案 1 :(得分:0)

如果我理解正确:

PROJECT
  ProjNum
  ShipDate

CUSTOMER
  ProjNum
  JobNum

TAGS
  JobNum

你想要所有未发货的项目:

SELECT c.JobNUm
FROM Project p
  INNER JOIN Customer c
    ON c.ProjNum = p.ProjNum
WHERE p.ShipDate is null

然后你想要TAGS表中没有JobNum的那些:

SELECT c.JobNUm
FROM Project p
  INNER JOIN Customer c
    ON c.ProjNum = p.ProjNum
WHERE p.ShipDate is null
  AND c.JobNum NOT IN (SELECT JobNum from TAGS)

可以做得更简单,但我想展示我的作品。

答案 2 :(得分:0)

LEFT JOIN可能比NOT INNOT EXISTS更快。

SELECT c.JobNUm
FROM Project p
  INNER JOIN Customer c
    ON c.ProjNum = p.ProjNum
  LEFT JOIN tags t ON t.jobnum=c.jobnum
WHERE p.ShipDate is null AND t.jobnum IS NULL