В MS Access у меня есть следующий запрос, и я хочу дублировать его в MysQl
SELECT New_Date_Sev54.*
FROM New_Date_Sev54 LEFT JOIN Old_Date_Sev54 ON New_Date_Sev54.[Expr1] = Old_Date_Sev54.[Expr1]
WHERE (((Old_Date_Sev54.Expr1) Is Null));
SELECT perimeter.*, perimeter.IP, perimeter.QID, perimeter.Severity, [IP] & [QID] AS Expr1
FROM perimeter
WHERE (((perimeter.QID)<>38628 And (perimeter.QID)<>38675) AND ((perimeter.Severity)=5) AND ((perimeter.Date)=22118)) OR (((perimeter.Severity)=4));
SELECT perimeter.*, perimeter.IP, perimeter.QID, perimeter.Severity, [IP] & [QID] AS Expr1
FROM perimeter
WHERE (((perimeter.QID)<>38628 And (perimeter.QID)<>38675) AND ((perimeter.Severity)=5) AND ((perimeter.Date)=21918)) OR (((perimeter.Severity)=4));
В запросе ACCESS я в основном беру все результаты с новой датой и сравниваю их с результатами старой даты (за неделю до этого) и возвращаю все, что не было за неделю до этого.
База данных используется для быстрого выявления новых уязвимостей, существующих в периметре. И имеет такую форму
Date | IP| VulnID | VulnName | Severity | Threat | Resolution
То, что я пытался в mysql, использует сравнение "NOT IN" двух операторов select. Однако он не работает.
Я хочу знать все новые уязвимости, которые имеют серьезность 4 или 5, и которые не имеют идентификатор Vuln 32628
Спасибо
Поместите каждый запрос в временные таблицы:
CREATE TEMPORARY TABLE newVulns AS ([new date query])
CREATE TEMPORARY TABLE oldVulns AS ([old date query])
где [новый запрос даты] и [старый запрос даты] - ваши операторы выбора.
затем
SELECT * FROM newVulns n
LEFT JOIN oldVulns o
ON n.VulnID = o.VulnID
WHERE o.VulnID IS NULL
AND n.VulnID != 32628
AND n.Severity NOT IN (4, 5)
Я считаю, что это нужно делать.
Информация о создании таблицы тем, найденная в руководстве, и подробное визуальное представление объединений можно найти здесь. Я все время смотрю на них.