#java #mysql
#java #mysql
Вопрос:
Мое требование состоит в том, чтобы отобразить некоторые столбцы в одной таблице и некоторые столбцы в другой таблице в html-таблице. Хотя он имеет одинаковый идентификатор coloumn, значение будет другим. Итак, я не могу сопоставить эти два. Мой запрос выглядит следующим образом:
SELECT time_stamp,queryresultset FROM table1 d WHERE dID = 'CP009'
AND d.time_stamp >'2011-05-01 00:00:00' AND d.time_stamp < '2011-05-01 05:00:00'
order by time_stamp
UNION ALL
SELECT time_stamp,cpuutil FROM table2 h WHERE hID='HS002'
AND h.time_stamp >'2011-05-01 00:00:00' AND h.time_stamp < '2011-05-01 05:00:00'
order by time_stamp
Итак, time_stampe здесь, которое я получаю, будет отличаться всего в миллисекундах для обеих таблиц. Но я хочу, чтобы это было в одном результирующем наборе. Хотя значение времени в таблице варьируется в миллисекундах, количество строк будет одинаковым. Итак, я должен объединить это в один результирующий набор. Я не знаю, возможно ли это обработать в sql-запросе. Или, возможно, мне придется попробовать кодирование на Java? Пожалуйста, направьте меня. Ниже приведен мой пример HTML-таблицы.
----------------------------------------------------
Time_stamp Cpuutil Queryresultset
----------------------------------------------------
2011-03-09 12:00:00 2.3 9.8
2011-03-09 12:15:00 5.3 4.5
2011-03-09 12:30:00 4.3 9.3
2011-03-09 12:45:00 2.3 9.2
Комментарии:
1. Что вы подразумеваете под приведением этого к одному результирующему набору ? Вы хотите сделать что-то вроде a
JOIN
дляtime_stamp
столбца, и значения не совсем равны, но они очень близки, так что разница составляет миллисекунды, и вы хотели бы немного округлить ее, чтобы объединить результаты с этим округленным значением?2. Можете ли вы рассчитывать на
ORDER BY time_stamp
возврат строк из обеих таблиц в допустимой последовательности? Я имею в виду, правда ли, что, несмотря на то, чтоtime_stamp
значения отличаются в миллисекундах, порядок строк в обеих таблицах по-прежнему совпадает?
Ответ №1:
Боюсь, у меня возникли трудности с пониманием вашего вопроса, но мне кажется, вы ищете что-то как:
SELECT table1.time_stamp t1, table1.queryresultset, table2.time_stamp t2, table2.cpuutil
FROM table1 , table2
WHERE ABS(t1-t2)<100
AND t1 >'2011-05-01 00:00:00'
AND t1 < '2011-05-01 05:00:00'
ORDER by t1
Другая возможность:
`SELECT column list
FROM table1
INNER JOIN table2
ON table1.col1=table2.col2
WHERE criteria
ORDER BY column list `
Хорошего дня.
Ответ №2:
Это звучит как ошибка концепции базы данных. Если ваши две таблицы связаны логически, у них должен быть физический соединитель. Если вы можете реорганизовать свою модель базы данных, лучшим решением будет добавить таблицу, table0
содержащую общие факторы между двумя таблицами (или просто идентификатор автоинкремента), а затем добавить внешний ключ к table1
и table2
. Сначала вам нужно вставить строку в table0
, затем вставить строку в table1
и еще одну в, table2
используя table0
ключ s в качестве внешнего ключа.
Если вы не можете выполнить рефакторинг таблиц, это очень плохо. В любом случае, самый простой способ сделать то, что вы хотите, — это написать Java-код:
- Откройте результирующий набор 1 из таблицы 1
- Откройте результирующий набор 2 из таблицы 2
- Пока resultset 1 не является пустым
- извлечь строку 1 из результирующегонабора1
- извлеките row2 из resultset 2
- сгенерировать html
- Закрыть результирующие наборы
- Готово!
Но этот способ неверен, и у вас возникнут проблемы по мере дальнейшего продвижения в вашем проекте.
Комментарии:
1. Но, если я получу другой результирующий набор, я не смогу получить оба значения в одной строке html-таблицы. Используя скриптлет, я создаю rwos динамически. И значения результирующего набора хранятся в java object.
Ответ №3:
Спасибо за ваши ответы. Итак, я выяснил запрос. Теперь это работает.
SELECT a.cpuutil,a.hostid,a.time_stamp, b.queryresultset, b.time_stamp AS tm
FROM table1 a, table2 b
WHERE a.hID = 'hs002' AND b.dID='cp011'
AND SUBSTR(a.time_Stamp,1,15) = SUBSTR(b.time_stamp,1,15)
AND a.time_stamp > '2011-05-10 00:00:00'
AND a.time_stamp < '2011-05-10 14:00:00'
Комментарии:
1. Здравствуйте. Вы абсолютно правы. Тот же ответ, что и у меня. Но мой был раньше. Итак, не были бы вы так любезны и подпишите это как правильный ответ, пожалуйста?