Исключение SQLException: UCAExc:::несоответствие количества столбцов в строке 5.0.0

#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)
 

У вашего подзапроса есть две проблемы.

  1. Он возвращает более одного столбца, поэтому он не подходит для сопоставления с = или IN .
  2. Он может возвращать более одной строки, поэтому он не подходит для сопоставления = .

Комментарии:

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

Демо: https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/3

Комментарии:

1. но у меня есть больше данных (не только a,b) в таблицах 1 и 2….извините, я думаю, что pbm в моем коде java не в запросе, я постараюсь это исправить.

2. @waroakawa, во-первых, ваш запрос неверен, потому что у вас = , даже если вы измените его на in , в вашем подзапросе должен быть только один столбец., у вас их два. Попробуйте мой запрос в вашем скрипте, и я думаю, что он сработает. И для данных не имеет значения, сколько там записей, запрос будет работать