Многоэлементный идентификатор "t.PartNumber" не может быть связан - с объединением - PullRequest
1 голос
/ 15 января 2012

Мне нужны записи из TableMain, у которых есть совпадение записей в ActivePN, а также совпадение в [Parts]. Кажется, что объединение должно сработать, но я продолжаю сталкиваться с ошибкой «не удалось связать» или «недопустимое имя столбца».

Я уверен, что смог бы добиться того, что мне нужно, создав временную таблицу, но я стараюсь сделать ее проще.

Select * from TableMain t
INNER JOIN  (select [PartNumber] 
    From ActivePNs ap
    Where ap.PartNumber = t.PartNumber
    Union
    select [Number] PartNumber 
    From [Parts] p
    Where p.Number = t.PartNumber) c 
On t.PartNumber = c.PartNumber 

Ответы [ 3 ]

0 голосов
/ 15 января 2012

Ваша проблема в SELECT после UNION.

select [Number] PartNumber   -- You rename Number to PartNumber
  From [Parts] p
  Where p.Number = t.PartNumber  -- but still reference Number here

Псевдоним Number в SELECT означает, что нет столбца p.Number для использования в WHERE части запроса.

0 голосов
/ 15 января 2012

Производная таблица не может быть сопоставлена ​​с таблицами, к которым она присоединяется. То, что вы пытаетесь сделать, может быть реализовано так:

SELECT
  t.*,
  COALESCE(ap.PartNumber, p.Number) AS PartNumber
FROM TableMain t
  LEFT JOIN ActivePN ap ON ap.PartNumber = t.PartNumber
  LEFT JOIN Parts p ON p.Number = t.PartNumber
WHERE NOT (ap.PartNumber IS NULL AND p.Number IS NULL)
0 голосов
/ 15 января 2012

Если не считать нескольких строк в ActivePN или деталях для данного PartNumber, то, как я понял, это должно сработать - найти только строки в TableMain, которые имеют PartNumber в ActivePNs и Запчасти:

Select t.* 
from TableMain t
    INNER JOIN ActivePNs ap ON t.PartNumber = ap.PartNumber
    INNER JOIN Parts p ON t.PartNumber = p.Number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...