#java #mysql #sql #inner-join #derby
#java #mysql #sql #внутреннее объединение #дерби
Вопрос:
У меня есть эти 2 таблицы: inventory
и product_categories
обе таблицы имеют общий столбец с именем businessId
.
Теперь у меня есть 2 базы данных, одна размещена в MySQL, а другая в Derby, обе базы данных имеют одинаковые структуры таблиц.
Итак, я выполнил следующий запрос для обеих баз данных:
SELECT *
FROM INVENTORY
INNER JOIN PRODUCT_CATEGORIES
ON INVENTORY.BUSINESSID = PRODUCT_CATEGORIES.BUSINESSID
AND INVENTORY.CATEGORY = PRODUCT_CATEGORIES.CATEGORYNAME
WHERE INVENTORY.BUSINESSID = 1
Когда я выполняю запрос выше, используя приведенный ниже Java-код, я получаю успешное ResultSet
в обеих базах данных, однако Derby выдает исключение, когда я пытаюсь получить businessId
столбец из product_categories
таблицы
try(Connection conn = dbConfig.getDatabaseConnection())
{
PreparedStatement pst = conn.prepareStatement(sql);
pst.setInt(1, businessId);
List<Product> products = new ArrayList<>();
ResultSet rs = pst.executeQuery();
while(rs.next())
{
...
int businessId = rs.getInt("product_categories.businessId"); //<-- This lines throws an exception
...
}
}
Я получаю это сообщение об ошибке:
java.sql.SQLException: столбец ‘product_categories.BusinessID’ не найден
Пожалуйста, что здесь происходит не так?
Комментарии:
1. Просто :
int businessId = rs.getInt("businessId")
Ответ №1:
Столбцы в результирующем наборе не имеют префикса с псевдонимами таблицы.
Заменить:
int businessId = rs.getInt("product_categories.businessId");
С:
int businessId = rs.getInt("businessId");
ПРИМЕЧАНИЕ: использование SELECT *
обычно не очень хорошая практика; лучше явно перечислить столбцы, которые вы хотите вернуть запросом. Это делает отступ запроса более четким и может помочь избежать конфликтов имен, когда одно и то же имя столбца существует в разных таблицах, которые используются в запросе.
Ответ №2:
Вероятно, это связано с различием в имени ключа для столбца в наборе результатов. Попробуйте выполнить запрос в своей базе данных, а затем скопируйте и вставьте имя столбца оттуда.
Вероятно, это должно быть BUSINESSID
или businessid
.
Рекомендуется использовать alias
для имен столбцов, когда вы объединяете несколько таблиц с одинаковым именем столбца.