Удалить результаты двойного объединения из запроса - PullRequest
1 голос
/ 29 мая 2009

У меня есть запрос, где я присоединяюсь к таблице, чтобы найти несоответствия между высотой или шириной детали. Единственная проблема состоит в том, что из-за этого соединения он будет возвращать каждое несоответствие дважды для каждой части. Я хочу вернуть только одну строку для каждого промаха, а не две.

Вот таблица:

tblTagGlass
JobID varchar
UnitCode varchar
PartCode varchar
PartQty int
TagHeight float
TagWidth float

и запрос:

select *
from tblTagGlass ttg
inner join tblTagGlass ttgC ON
ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
where ttg.TagHeight != ttgC.TagHeight
or ttg.TagWidth != ttgC.TagWidth
order by ttg.PartCode

и результаты:

INC375 U2-052 VT2-011 1 2013   1444.5   INC375 U2-028 VT2-011 1 2012.5 1444.5
INC375 U2-028 VT2-011 1 2012.5 1444.5   INC375 U2-052 VT2-011 1 2013   1444.5

Надеюсь, это имеет смысл ...

Ответы [ 3 ]

1 голос
/ 29 мая 2009

Давайте сделаем предположение:

  • ПЕРВИЧНЫЙ КЛЮЧ (JobCode, UnitCode, PartCode)

То, что вы ищете, это элементы с одинаковыми JobCode и PartCode, но с разными значениями UnitCode - и с разницей либо в TagHeight, либо в TagWidth (или в обоих). Итак, используйте трюк «>» на UnitCode, чтобы различать строки и предотвращать дублирование, но «! =», Чтобы обнаружить различия в TagHeight или TagWidth:

SELECT *
    FROM tblTagGlass ttg JOIN tblTagGlass ttgC
         ON  ttg.JobID = ttgC.JobID
         AND ttg.PartCode = ttgC.PartCode
         AND ttg.UnitCode > ttgC.UnitCode
    WHERE (ttg.TagHeight != ttgC.TagHeight
       OR ttg.TagWidth != ttgC.TagWidth)
    ORDER BY ttg.PartCode
1 голос
/ 29 мая 2009

Попробуйте

select *
from tblTagGlass ttg
inner join tblTagGlass ttgC ON
ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
where (ttg.TagHeight != ttgC.TagHeight OR ttg.TagWidth != ttgC.TagWidth)
AND ((ttg.TagHeight >= ttgC.TagHeight AND ttg.TagWidth >= ttgC.TagWidth) 
    OR (ttg.TagHeight > ttgC.TagHeight AND ttg.TagWidth < ttgC.TagWidth))
order by ttg.PartCode

Разница заключается в использовании> для сравнения вместо! =

0 голосов
/ 29 мая 2009

Возникает вопрос, какую информацию вы хотите получить из строк. Это разные ряды.

Если вы просто хотите получить код детали, это сработает:

select ttg.PartCode
from tblTagGlass ttg
inner join tblTagGlass ttgC ON
ttg.JobID = ttgC.JobID
AND ttg.PartCode = ttgC.PartCode
where ttg.TagHeight != ttgC.TagHeight
or ttg.TagWidth != ttgC.TagWidth
group by ttg.PartCode
order by ttg.PartCode

Кроме того, вам нужно решить, какое объединение информации вы хотите получить по строкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...