Как запросить разные таблицы для данных в порядке - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно изменить этот код, но я не знаю, как это сделать.

Мне нужно проверить данные в указанном порядке в этих таблицах NodeMACAddresses,
MAC_address,
'Нет MacAddress ', если данные не были найдены

Mac-адреса из SNMP хранятся в таблице, автоматически называемой NodeMacAddresses, но некоторые устройства не отвечают на SNMP, поэтому я добавляю их вручную в таблицу с именем MAC_address, которую я создал.Поэтому мне нужно сначала проверить, есть ли данные в NodeMACAddresses, затем MAC_address, затем набрать «No Mac Address», если обе таблицы содержат NULL.

select coalesce(max(MAC), 'No Mac Address')
from NodeMACAddresses 
where NodeID = $@nodeid@;

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Хммм. , , Вот один из методов:

select coalesce((select max(MAC)
                 from NodeMACAddresses 
                 where NodeID = $@nodeid@
                ),
                (select max(MAC)
                 from MACAddress
                 where NodeID = $@nodeid@
                ),
                'No Mac Address'
               )
0 голосов
/ 10 мая 2019

Вы можете ранжировать, упорядочить все результаты, а затем вытащить первый.

SELECT
    *
FROM
(
    SELECT 
        NodeId,MAC,Priority,
        RN=ROW_NUMBER() OVER(PARTITION BY NodeID ORDER BY Priority DESC) 
    FROM
    (
        SELECT NodeID,MAC, Priority=1 FROM NodeMACAddresses WHERE  NodeID=@NodeID
        UNION 
        SELECT NodeID,MAC, Priority=2 FROM MAC_Address WHERE NodeID=@NodeID
        UNION
        SELECT NodeID=@nodeid, MAC = 'No Mac Address', Priority=3
    )AS A
)AS B
WHERE
    RN=1

Или без рейтинга

SELECT
    NodeId=@NodeID,
    MAC=COALESCE(A.MAC,B.MAC,C.MAC)
FROM
(
    SELECT MAC = 'No Mac Address' 
)AS C
LEFT OUTER JOIN NodeMACAddresses A ON A.NodeID=@NodeID
LEFT OUTER JOIN MAC_Address B ON B.NodeID=@NodeID 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...