Страница 3 из 4

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 31 июл 2013, 17:01
aleksbim
И все же, выше было сказано, что PS и PL -это псевдонимы для уменьшения кол-ва букв. Не напишете ли эти строки без псевдонимов?

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 31 июл 2013, 17:07
Foenix
глупо делать псевдонимы для уменьшения количества букв. Это делается с другой целью. В данном случае, приведенном тобой - эти псевдонимы вообще не нужны. Убери их и все.
Псевдонимы могут понадобиться, когда например, выбираем sum(salary) as summa для того, чтобы иметь возможность доступа к получившемуся столбцу значений в программе по имени. Или когда селект сложный, выборка происходит из другой выборки, и нужно в этом же селекте обратиться к результатам внутреннего селекта.

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 31 июл 2013, 17:11
Foenix
aleksbim писал(а): "select people.name , position.name , position.salary "
+ "from people "
+ "inner join position "
+ "on people.posid = position.id "
+ "where salary > ?";
Примерно так будет без псевдонимов. для отличия в одном месте можно дописать position.name as ... (как угодно) чтобы не было дубликата наименования в результате.

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 01 авг 2013, 18:31
Foenix
забыла дописать
вот тут например position.salary можно не указывать наименовани таблицы, т.к. поле salary есть только в ней, поэтому если удалить и оставить просто salary тоже будет работать.

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 20 авг 2013, 18:03
murray

Код: Выделить всё

c = db.query("people, position", new String[] {"people.id", "position.name","position.id","position.salary"}, "people.posid = position.id", null, null, null, null);

Код: Выделить всё

id = 2; name = Программер; id = 2; salary = 13000; 
id = 3; name = Бухгалтер; id = 3; salary = 10000; 
id = 2; name = Программер; id = 2; salary = 13000; 
id = 2; name = Программер; id = 2; salary = 13000; 
При выводе запроса вместо столбца people.id выводится position.id. То есть если столбцы в разных таблицах имеют одинаковое имя, то они выводятся некорректно.
Стоит написать "position.id as qw". Где qw-произвольное имя. Тогда вывод корректен.

Код: Выделить всё

id = 1; name = Программер; qw = 2; salary = 13000; 
id = 2; name = Бухгалтер; qw = 3; salary = 10000; 
id = 3; name = Программер; qw = 2; salary = 13000; 
id = 4; name = Программер; qw = 2; salary = 13000; 

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 18 дек 2013, 09:17
plesser
Что использовать rawQuery или query – решать вам и зависит от ситуации. Хотя, навскидку я не могу придумать
преимущества одного над другим в той или иной ситуации. Но наверно они есть.
Дошел до 37 урока и встретил этот абзац.
На самом деле у rawQuery есть то преимущество что я могу квотировать параметры не только в части where но и в других, например в select но и having


Да и вообще практика использовать конструкции типа "where somefield="+somevar мягко говоря не очень хорошая

Вообщем как то так

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 16 янв 2014, 21:12
TittTitov
Добрый день!

Объясните пожалуйста: в данном уроке метод logCursor(c); - это какой-то специальный метод или это частная запись для сокращения кода?

Также, интересует эта строка: for (String cn : c.getColumnNames()) { - что означает двоеточие?

И ещё, по каким правилам используются квадратные скобки при объявлении массивов: String columns[] и String[] selectionArgs - почему в одном случае кавычки после String, а во втором - после имени объекта? Спасибо! ...и не пинайте сильно, если что :)

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 16 янв 2014, 21:19
TittTitov
P.S.: разъясните пожалуйста, также, зачем мы пишем cv.clear(); перед заполнением таблиц в данном примере? Спасибо!

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 16 янв 2014, 22:17
Foenix
TittTitov писал(а):Добрый день!

Объясните пожалуйста: в данном уроке метод logCursor(c); - это какой-то специальный метод или это частная запись для сокращения кода?

Также, интересует эта строка: for (String cn : c.getColumnNames()) { - что означает двоеточие?

И ещё, по каким правилам используются квадратные скобки при объявлении массивов: String columns[] и String[] selectionArgs - почему в одном случае кавычки после String, а во втором - после имени объекта? Спасибо! ...и не пинайте сильно, если что :)
logCursor() - это вызов самостоятельно написанного метода из кода:

Код: Выделить всё

 void logCursor(Cursor c) {
    if (c != null) {
      if (c.moveToFirst()) {
        String str;
        do {
          str = "";
          for (String cn : c.getColumnNames()) {
            str = str.concat(cn + " = " + c.getString(c.getColumnIndex(cn)) + "; ");
          }
          Log.d(LOG_TAG, str);
        } while (c.moveToNext());
      }
    } else
      Log.d(LOG_TAG, "Cursor is null");
  }
двоеточие означает "в", т.е. для каждого... во множестве...

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 16 янв 2014, 22:18
Foenix
не кавычки, а квадратные скобки, обозначают безмерный массив типа то, что (перед скобками)
например
int[] position_id = { 1, 2, 3, 4 };
это объявлена переменная position_id типа массив целых.

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 16 янв 2014, 22:21
Foenix
а это
String columns[] = { "PL.name as Name", "PS.name as Position", "salary as Salary" };
объявлено множество из строковых значений.

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 17 янв 2014, 00:02
Foenix
TittTitov писал(а):P.S.: разъясните пожалуйста, также, зачем мы пишем cv.clear(); перед заполнением таблиц в данном примере? Спасибо!
это мы так на всякий случай стираем все, возможно имеющиеся, пары значений в переменной о которой я вам писала в предыдущем вопросе (типа ContentValues )

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 07 фев 2014, 19:12
September
Собственно возникла проблема с запросом в rowQuery

Вот запрос который скопипащен(он прекрасно работает в программе)

[syntax=java]"select PL.name as Name, PS.name as Position, salary as Salary "
+ "from people as PL "
+ "inner join position as PS "
+ "on PL.posid = PS.id "
+ "where salary > ?";[/syntax]

А вот запрос который писался в ручную и выдает ошибку
[syntax=java]"SELECT PL.name as Name, PS.name as Position, salary as Salary "
+ "from people as PL "
+ "inner join position sa PS "
+ "on PL.posid = PS.id "
+ "where salary > ?";[/syntax]

Собственно не вижу ризницы и хочу разобраться где допустил ошибку я.

Сам код ошибки
Изображение

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 07 фев 2014, 21:16
Foenix
там надо as а у тебя sa

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 07 фев 2014, 23:09
September
И ведь раз десять пересматривал и не заметил, спасибо за помощь.

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 07 фев 2014, 23:24
Foenix
вообще-то это в логе написано, красным по белому

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 04 апр 2014, 09:42
TAMEPJlAH
Здравствуйте. Имеется три активити (MainActivity (основная), Program (программы подготовки) и Speciality (специальности)), база данных (myDB), которая содержит 3 таблицы (связанные по ID) и которая создана в MainActivity. Как сделать чтобы при нажатии на кнопку, расположенную в активити Program считывались данные из БД? Желательно с помощью Intent
P.S. может быть не в той теме написал, поэтому сразу извиняюсь за это

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 04 апр 2014, 11:10
Foenix

Код: Выделить всё

Желательно с помощью Intent
c с помощью какого-такого Intent?

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 07 апр 2014, 08:59
TAMEPJlAH
Foenix писал(а):c с помощью какого-такого Intent?
по уроку 28

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Добавлено: 07 апр 2014, 10:30
Foenix
Данный урок не относится к теме, а так же никак не относится к
считывались данные из БД?