#java #mysql #ms-access #jdbc #ucanaccess
Вопрос:
У меня есть проект, созданный с помощью кода java, и база данных, содержащая две таблицы (table1 и table2), выглядит следующим образом:
-------table1--------
Name | Ref
__________|__________
A | 100
B | 200
__________|__________
and
-------table2--------
Name | Q
__________|__________
A | 12
B | 10
A | 14
__________|__________
Я пытаюсь создать SQL-запрос, чтобы получить этот результат:
Name | Ref | SUM(Q)
__________|_________|__________
A | 100 | 26
B | 200 | 10
__________|_________|__________
Я написал этот запрос
query ="SELECT table1.Name,table1.Ref FROM table1 WHERE table1.Name=(SELECT table2.Name,SUM(table2.Q) FROM table2 GROUP BY table2.Name)";
но мой код не работает, и я получаю эту ошибку:
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::5.0.0 row column count mismatch
есть какие-либо предложения по исправлению моего кода запроса?
Комментарии:
1. Пожалуйста, не меняйте свой вопрос после того, как на него был дан ответ. вместо этого, пожалуйста, задайте другой вопрос , если вам нужна помощь в чем-то другом.
Ответ №1:
Используйте это:
SELECT table1.Name,table1.Ref
FROM table1
WHERE table1.Name IN (SELECT table2.Name FROM table2)
У вашего подзапроса есть две проблемы.
- Он возвращает более одного столбца, поэтому он не подходит для сопоставления с
=
илиIN
. - Он может возвращать более одной строки, поэтому он не подходит для сопоставления
=
.
Комментарии:
1. но мне нужно показать результат
SUM(table2.Q)
того, как я могу это сделать ??2. Пожалуйста, задайте еще один вопрос. И, в вопросе, пожалуйста, покажите некоторые примеры данных и желаемые результаты из этих примеров данных.
3. извините, я думаю, что pbm в моем коде java не в запросе, я постараюсь это исправить
Ответ №2:
Вы можете использовать:
select a.name,ref,name_sum
from table1 a
inner join (
select name,sum(Q) as name_sum
from table2
group by name) b
on a.name=b.name;
В table2
вы можете выбрать sum
то, что вам нужно, и присоединиться к table1
Комментарии:
1. но у меня есть больше данных (не только a,b) в таблицах 1 и 2….извините, я думаю, что pbm в моем коде java не в запросе, я постараюсь это исправить.
2. @waroakawa, во-первых, ваш запрос неверен, потому что у вас
=
, даже если вы измените его наin
, в вашем подзапросе должен быть только один столбец., у вас их два. Попробуйте мой запрос в вашем скрипте, и я думаю, что он сработает. И для данных не имеет значения, сколько там записей, запрос будет работать