как искать список чисел в разных полях разных таблиц? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть список номеров, которые я загрузил во временную таблицу в базе данных.Мне нужно выяснить, находятся ли эти числа в двух разных таблицах и в разных полях этих таблиц.Например ...

TemporaryTable

field1 значения (1, 2, 3, 4, 5, 6, ... n)

Table1 ID, n1, n2, n3, n4, n5, n6, n7, n7, n8

Table2 ID, n1, n2, n3, n4

ID из Table1 и Table2 одинаковы.Значения field1 в #TemporaryTable могут быть в любом поле любой из двух таблиц.

Кроме того, числа во временной таблице плоские, а в полях двух других таблиц они могут иметь тире -.Это я решил, используя REPLACE (n1, '-', '')

Я просто хочу показать ID и номер.Если его нет ни в одном, я просто не показываю его.

Надеюсь, вы мне поможете.

1 Ответ

0 голосов
/ 06 февраля 2019

Какова ваша конечная мотивация?Если вы действительно обнаружите, что должны это сделать, возможно, вы захотите пересмотреть свой дизайн.Но, просто для удовольствия:

Во-первых, давайте на самом деле создадим эти таблицы:

create table #table1 ( 
    ID int identity(1,1), 
    n1 int, n2 int, n3 int, n4 int, 
    n5 int, n6 int, n7 int, n8 int
);

insert #table1 values 
    (1,2,3,4,5,6,7,8),
    (5,6,7,8,9,10,11,12),
    (9,10,11,12,13,14,15,16);

create table #table2 ( 
    ID int identity(1,1), 
    n1 int, n2 int, n3 int, n4 int
);

insert #table2 values 
    (1,2,3,4),
    (3,4,5,6),
    (7,8,9,10);

Теперь вертикализуем с помощью unpivot, чтобы все значения были в одном столбце:

declare @verticalized table (
    tbl int,
    id int,
    col char(2),
    val int
);

insert     @verticalized        
select     1 tbl, id, col, val
from       #table1
unpivot    (val for col in (n1,n2,n3,n4,n5,n6,n7,n8)) up

union all
select     2, id, col, val
from       #table2
unpivot    (val for col in (n1,n2,n3,n4)) up

Затем сделайте несколько обобщений, чтобы ответить на ваши вопросы.

select     val,
           tbls = count(distinct tbl), -- # of tables value is in
           cols = count(distinct col), -- # of columns value is in

           -- specific locations you can find the value
           locations = stuff((
               select   
               distinct ',T' + convert(char(1),tbl) + '.C' + col
               from     @verticalized sub
               where    sub.val = v.val
               for xml  path('')
           ),1,1,'')

from       @verticalized v
group by   val

Вы упоминаете присутствие, в частности, в 'field1'.Вы, вероятно, можете работать с кодом оттуда.

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