Как получить общий счет по одному из запросов внутреннего соединения?

Я написал следующий запрос MYSQL, и версия Mysql8.0.18-commercial

SELECT p.server, 'Type1' AS Check_Type, 
       GROUP_CONCAT(vmtable.res SEPARATOR ', ') AS result
FROM server p 
INNER JOIN truns t ON t.oq_id = p.oq_id
    AND t.id = (SELECT t2.id FROM truns t2 
                WHERE t2.oq_id = p.oq_id 
                order by t2.created_at desc limit 1 )
INNER JOIN qvuln_info vmtable ON vmtable.run_id = t.id 
LEFT JOIN qvuln_info_data vmtableinfo ON vmtableinfo.qid = vmtable.qid   
WHERE p.server regexp 'server1'
GROUP BY p.server

Я получаю вывод как:

Hostname   Check_Type  result
server1    Type_ABC    Result 1,Result 2,Result 3,Result 4

Я хочу добавить еще один столбец какVulCount на верхнем уровне, и это значение должно поступать из одного из запросов внутреннего соединения:

SELECT t2.id 
FROM truns t2 
WHERE t2.oq_id = p.oq_id 
order by t2.created_at desc

Результат должен выглядеть следующим образом:

Hostname   VulCount    Check_Type  result
server1    4            Type_ABC       Result 1,Result 2,Result 3,Result 4

Здесь,4 это результат

SELECT count(*) 
FROM truns t2 
WHERE t2.oq_id = p.oq_id 
order by t2.created_at desc
# select join inner-join left-join
Источник
Codelisting
за 0 против

@mealhour нельзя просто включить такой подзапрос:

SELECT p.server, 
       der.VulCount,
       'Type1' AS Check_Type, 
       GROUP_CONCAT(vmtable.res SEPARATOR ', ') AS result
FROM server p 
INNER JOIN truns t ON t.oq_id = p.oq_id
    AND t.id = (SELECT t2.id FROM truns t2 
                WHERE t2.oq_id = p.oq_id 
                order by t2.created_at desc limit 1 )
INNER JOIN qvuln_info vmtable ON vmtable.run_id = t.id 
LEFT JOIN qvuln_info_data vmtableinfo ON vmtableinfo.qid = vmtable.qid 
JOIN (SELECT t2.oq_id, 
          count(t2.*) as VulCount
      FROM truns t2 
      GROUP BY t2.oq_id) AS der  
WHERE p.server regexp 'server1'
    AND der.oq_id = p.oq_id
GROUP BY p.server
  • 0
    Я получаю сообщение об Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) as VulCount FROM truns t2 GROUP BY t2.oq_id) AS d' at line 53 0.078 sec
  • 0
    @mealhour измените t2.* на что-то уникальное для каждой строки, чтобы получить счет, чаще всего это столбец id если у вас есть столбец, который уникален, например, id измените count(t2.*) на count(t2.id) , это должно сделать это за вас
Codelisting
Популярные категории
На заметку программисту