MySQL запрашивает две таблицы с разными полями

Для Eclipse работало следующее выражение:

Foo

jadajada Bar "

Регулярное выражение:

Foo[\S\s]{1,10}.*Bar*
-2
задан enkiki 3 March 2019 в 10:29
поделиться

1 ответ

Для UNION не имеет значения, имеют ли таблицы одинаковые поля или нет, так как количество выбранных столбцов в обоих операторах SELECT совпадает.

Таким образом, оба SELECT должны будут выбирать одинаковое количество столбцов, и совпадающие столбцы в каждом SELECT должны иметь один и тот же dataType (вы можете использовать CAST для принудительного использования одного и того же dataType, если это имеет смысл).

Пример:

SELECT 
  url AS Field1, 
  title AS Field2, 
  description AS Field3, 
  impact AS Field4, 
  solution AS Field5, 
  severitylevel AS Field6, 
  category AS Field7,
  "-" AS Field8
FROM admin_cyber.sss3wn
WHERE severitylevel = "5" 
  AND client = "user1" 
UNION
SELECT 
  name AS Field1, 
  risk AS Field2, 
  host AS Field3, 
  protocol AS Field4, 
  CAST(port AS NVarChar) AS Field5, 
  pluginoutput AS Field6, 
  description AS Field7, 
  solution AS Field8
FROM admin_cyber.sss1wn
WHERE risk = "Critical" AND client = "myuser1"
AND datescanned IN (SELECT max(datescanned) FROM admin_cyber.sss1wn);

Я предполагаю, что все совпадающие поля имеют один и тот же dataType (за исключением решения: NvarChar и port: integer, чтобы служить примером того, как вы можете что-то CAST). В восьмом поле константа была выбрана в первом операторе, чтобы заставить одинаковое количество выборов между операторами SELECT.

Вероятно, не имеет смысла делать этот UNION (мне кажется, что совпадающие поля не имеют никакого отношения к их значению), но это то, на что был бы похож UNION.

РЕДАКТИРОВАТЬ: Если на самом деле данные из обоих SELECT действительно разные (по смыслу), и все же вам нужно перечислить их как один набор результатов, вы можете сделать что-то вроде:

SELECT 
  "INCIDENT" AS RowType,
  url AS Url_or_Name, 
  title AS Title_or_Risk, 
  description AS Desc_or_Host, 
  impact AS Impct_or_Prot, 
  solution AS Sol_or_Port, 
  severitylevel AS Lvl_or_Output, 
  category AS Cat_or_Desc,
  "-" AS Field8
FROM admin_cyber.sss3wn
WHERE severitylevel = "5" 
  AND client = "user1" 
UNION
SELECT 
  "CONNECTION" AS RowType,
  name AS Url_or_Name, 
  risk AS Title_or_Risk, 
  host AS Desc_or_Host, 
  protocol AS Impct_or_Prot, 
  CAST(port AS NVarChar) AS Sol_or_Port, 
  pluginoutput AS Lvl_or_Output, 
  description AS Cat_or_Desc, 
  solution AS Field8
FROM admin_cyber.sss1wn
WHERE risk = "Critical" AND client = "myuser1"
AND datescanned IN (SELECT max(datescanned) FROM admin_cyber.sss1wn);

Или Вы можете обнаружить, что было бы лучше переупорядочить выбранные столбцы, чтобы лучше соответствовать их значению в результирующих столбцах объединения.

0
ответ дан Marcelo Myara 3 March 2019 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: