Запись запроса SELECT в l oop всех элементов в списке элементов - PullRequest
0 голосов
/ 14 апреля 2020

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

Например, скажем, у меня есть такой список,

list =[ { item_1: value_11,
          item_2: value_12,
          item_3: value_13,
          item_4: value_14'
        },
        { item_1: value_21,
          item_2: value_22,
          item_3: value_23,
          item_4: value_24,
        },
        { item_1: value_31,
          item_2: value_32,
          item_3: value_33,
          item_4: value_34,
        },
        ......
      ];

Теперь мне нужно написать запрос SELECT, чтобы получить все связанные записи для каждого элемента, что-то вроде

//for each item
SELECT * FROM tbl WHERE tbl.fld1 = list[0].item_1 AND tbl.fld2 = list[0].item_2 AND tbl.fld3 = list[0].item_3 AND tbl.fld4 = list[0].item_4;

Можно ли написать один запрос для того же в выражении SQL (вроде l oop), иначе его нужно повторить со стороны кодирования, чтобы он вызывал БД для каждого элемента в отдельности.

Пожалуйста, помогите,

Спасибо заранее

1 Ответ

0 голосов
/ 14 апреля 2020

Как уже заметил @draz, вам нужно l oop над списком, чтобы динамически создать оператор sql. Вы можете l oop над ним в своем коде и сгенерировать один оператор sql, который можно отправить в базу данных один раз.

Простая, но, вероятно, не самая хорошая идея будет выглядеть примерно так:

sql_select = "SELECT * FROM tbl WHERE";
first_item = true;
for (element in list) {
    sql_select = (first_item) ? sql_select : sql_select + " OR";
    fist_item = false;
    where_clause = ` (tbl.fld1 = ${element.item_1} AND tbl.fld2 = ${element.item_2} AND tbl.fld3 = ${element.item_3} AND tbl.fld4 = ${element.item_4})`;
    sql_select.concat(where_clause); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...