2014-10-23 2 views
0

Я не уверен, что это возможно, но я хочу создать запрос вставки для подготовленного оператора, где запрос вставки состоит из соединения между двумя таблицами.ПодготовленоStatment с левым Присоединиться

E.g. (Возможно, глупый пример)

String sql = "INSERT INTO TABLE_A A (" + 
      "GenderId, Name, Surname, Age) VALUES (B.GenderId, ?, ?, ?) " + 
      "LEFT JOIN TABLE_B B ON A.GenderId = B.GenderId " + 
      "WHERE B.Gender = 'Male'"; 

PreparedStatement statement = conn.prepareStatement(sql); 
statement.setString(1, "Bill"); 
statement.setString(2, "Gates"); 
statement.setInt(3, 50); 
+2

Там нет такого синтаксиса SQL, независимо от использования 'PreparedStatement's. Что именно вы пытаетесь достичь? – Mureinik

ответ

1

Если я понимаю, что вы пытаетесь достичь, вы можете использовать ЗЕЬЕСТ для генерации значений, которые вы хотите вставить.

INSERT INTO TABLE_A (GenderId, Name, Surname, Age) 
SELECT b.GenderId, ?, ?, ? FROM TABLE_B B 
WHERE b.Gender = 'Male' 

Там какая-то базовая чтение по этому вопросу here

+0

Это похоже на работу, за исключением того, что я получаю и ошибочно «утверждение не вернуло результирующий набор». Несмотря на эту ошибку, записи все еще вставлены. Любая идея почему? –

+1

Я не могу видеть из вашего примера кода, но, возможно, потому, что вы используете statement.executeQuery(). Это ожидает, что результат будет возвращен. Если это так, вы можете попробовать statement.execute(). Это используется, когда вы выполняете SQL, который, как ожидается, ничего не возвращает (INSERT/UPDATE/DELETE/etc) – Spheniscus

+0

У меня действительно есть statement.executeQuery(). statement.execute() решила проблему. Спасибо. –