Объединение нескольких запросов MySQL в 1 вывод

0

что я делаю неправильно здесь, поскольку я пытаюсь получить все выходы из обоих запросов ниже в 1 запросе, т.е.

кол (centerpoint_stream_stable), дата, website_online, icecast_source_online, icecast_source_ip, icecast_no_listeners, centerpoint_online, centerpoint_connection, centerpoint_stream_stable, centerpoint_stream_status, horsleypark_online, horsleypark_connection, horsleypark_stream_stable, horsleypark_stream_status, local_primary_internet_online, local_primary_internet_ping, local_primary_instreamer_online, local_secondary_internet_online, local_secondary_internet_ping, local_secondary_instreamer_online, system_ok 2 запросов я хотел бы к союзу

select count(centerpoint_stream_stable) from status_log where  centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream' and  date > date_sub(now(), interval 1 minute) ;

а также

SELECT date, website_online, icecast_source_online, icecast_source_ip, icecast_no_listeners, centerpoint_online, centerpoint_connection, centerpoint_stream_stable,centerpoint_stream_status,  horsleypark_online, horsleypark_connection,horsleypark_stream_stable,horsleypark_stream_status, local_primary_internet_online,local_primary_internet_ping, local_primary_instreamer_online,local_secondary_internet_online,local_secondary_internet_ping,local_secondary_instreamer_online,system_ok FROM status_log ORDER BY id DESC LIMIT 1;

объединение обоих запросов, приведенных выше, дает следующую ошибку;

ОШИБКА 1248 (42000): Каждая производная таблица должна иметь свой собственный псевдоним

(select * from (select 
        date, 
    website_online, 
    icecast_source_online, 
    icecast_source_ip, 
    icecast_no_listeners, 
    centerpoint_online, 
    centerpoint_connection,     
    centerpoint_stream_stable,
    centerpoint_stream_status,      
    horsleypark_online, 
    horsleypark_connection,
    horsleypark_stream_stable,
    horsleypark_stream_status, 
    local_primary_internet_online,
    local_primary_internet_ping,        
    local_primary_instreamer_online,    
    local_secondary_internet_online,    
    local_secondary_internet_ping,
    local_secondary_instreamer_online,
    system_ok
FROM status_log ORDER BY id DESC LIMIT 1))


union all
(select * from (select count(centerpoint_stream_stable) from status_log where  centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream' and  date > date_sub(now(), interval 1 minute) ));
  • 1
    если вы создаете подзапрос, вам нужно назвать его: (select * from t) as alias_table_name
Теги:
union

1 ответ

0
Лучший ответ

Круглые скобки используются для подзапросов, и тогда вы должны дать каждому подзапросу псевдоним, как это предлагает ошибка. Пример:

(SELECT id FROM table1) a
UNION
(SELECT id FROM table2) b

Что еще более важно, когда вы используете UNION, все поля в обоих запросах должны точно совпадать. У ваших запросов есть совершенно разные поля.

EDIT UNION - это добавить результаты первого запроса к результатам второго запроса. В вашем случае вы не пытаетесь добавить результаты вместе, вы пытаетесь добавить поля вместе. Для этого вы можете использовать соединения или подзапросы. Попробуйте это с помощью дополнительных запросов:

SELECT (SELECT COUNT (s2.centerpoint_stream_stable)
        FROM status_log s2
        WHERE s2.id = s.id
          AND s2.centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream'
          AND s2.date > date_sub(NOW(), INTERVAL 1 MINUTE)) AS my_count,

       s.date, s.website_online, s.icecast_source_online, s.icecast_source_ip,
       s.icecast_no_listeners, s.centerpoint_online, s.centerpoint_connection,
       s.centerpoint_stream_stable, s.centerpoint_stream_status,  s.horsleypark_online,
       s.horsleypark_connection, s.horsleypark_stream_stable, s.horsleypark_stream_status,
       s.local_primary_internet_online, s.local_primary_internet_ping,
       s.local_primary_instreamer_online, s.local_secondary_internet_online,
       s.local_secondary_internet_ping, s.local_secondary_instreamer_online, s.system_ok
FROM status_log s
ORDER BY id DESC
LIMIT 1;

Я сделал ваш первый запрос в качестве подзапроса. Это дает вам первое поле счетчика. Я назвал его my_count, но вы можете изменить его на все, что захотите.

Чтобы объединить два запроса вместе, вам необходимо предоставить условие соединения, поэтому я добавил условие s2.id = s.id к вашему первому запросу.

Я не знаю, почему у вас есть LIMIT 1 в конце вашего второго запроса. Это даст вам одну запись с самым большим id.

  • 1
    Скобки в запросах на объединение иногда имеют смысл или даже необходимы. Например, при использовании order by или limit .
  • 0
    спасибо, но я просто нуб, не могли бы вы предоставить правильное использование, решение
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню