Соединение двух таблиц с последующим извлечением несопоставленных записей из третьей таблицы - PullRequest
1 голос
/ 10 мая 2011

У меня Visual Studio 2005 и я пишу код на VB, а не на C +. Мне нужно утверждение Select, и я нашел некоторые из них, которые близки, но не соответствуют моей ситуации. У меня есть три таблицы:

PROJECT
    [Projnum]
    [ShipDate] 

CUSTOMER
    [Projnum]
    [Jobnum]

TAGS
    [Jobnum] 

Мне нужно присоединиться к CUSTOMER и PROJECT, чтобы я знал все записи CUSTOMER.Jobnum, где PROJECT.ShipDate имеет значение null. Из этих записей мне нужно узнать, какие из них не совпадают с TAGS.Jobnum.

Любая помощь будет высоко ценится. Большое спасибо, Чак.

Ответы [ 3 ]

0 голосов
/ 10 мая 2011

Если я правильно понимаю:

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

А затем вам нужны проекты без JobNum в таблице TAGS:

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)

Можно было бы сделать проще, но я хотел показать свою работу.

0 голосов
/ 11 мая 2011

A LEFT JOIN может быть быстрее, чем NOT IN и NOT 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
0 голосов
/ 10 мая 2011
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)
...