Использование одного запроса в другом в программировании JDBC - PullRequest
0 голосов
/ 02 декабря 2010

Я понимаю, как сделать это на бумаге в SQL, но у меня возникают проблемы с реализацией этого в Java (это первый раз, когда я на самом деле программирую JDBC)

Например, скажем, моя база данных состоит из:

фильм ( код , название, издатель)

клиент ( custno , имя)

заимствовано ( custno , код )

И я хочу найти имена клиентов, которые позаимствовали каждый фильм у издателя ABC

string no_of_ABC_movies = "SELECT COUNT(publisher), publisher FROM movie, WHERE movie.publisher = 'ABC'";

string no_of_cust_ABC_movies = "SELECT COUNT(name), name FROM customer, borrowed, movie, WHERE customer.custno = borrowed.custno AND borrowed.code = movie.code AND movie.publisher = 'ABC'";


String query = "SELECT name" +
                        " name FROM customer, borrowed, movie" +
                        " WHERE customer.custno = borrowed.custno AND" +
                        " borrowed.code = movie.code AND" +
                        " movie.publisher = 'ABC' AND" + " "
                         no_of_cust_ABC_movies + " = " + no_of_ABC_movies;

Это не та база данных, с которой я работаю, но запрос сработает и выведет имена людей, которые позаимствовали фильмы у ABC без последней строки, но говорит, что у меня ошибка в синтаксисе SQL с последней строкой, поэтому Наверное, я не знаю, как использовать один запрос в другом.

Ответы [ 4 ]

3 голосов
/ 02 декабря 2010

Это зависит от вашей СУБД, но каждый вариант SQL, который я видел, требует скобок вокруг подзапросов.

Попробуйте что-то вроде:

...

" movie.publisher = 'ABC' AND ("
no_of_cust_ABC_movies + ") = (" + no_of_ABC_movies + ")";
1 голос
/ 02 декабря 2010

Мне нравится, когда мои запросы работают в браузере запросов или на рабочем месте, а затем копируют их в Java.Это держит это к одной новой вещи за один раз ...

1 голос
/ 02 декабря 2010

У вас есть проблема с полем двойного имени, не разделенным запятой в вашем запросе.

Если ваш код в точности соответствует указанному выше, у вас есть ошибка компиляции чуть выше последней пропущенной строки + для объединения строк.

Если это опечатка ниже, это мое предложение.

  1. Удалить дубликат выбора (используйте только одно имя) или
  2. Разделяйте имена запятыми (хотя я не вижу смысла выбирать имя дважды)

И ваша последняя строка неверна .. Вы не можете сравнивать два запроса на выборку таким образом. Просто добавьте необходимые операторы where.

(Вы должны сначала прочитать присоединения к базе данных, а затем решить вашу проблему)

0 голосов
/ 02 декабря 2010

Ваш запрос фактически начинается с

 SELECT name name FROM customer ...

Колонка name дублирована - возможно, в этом проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...