Использование результата одного запроса для ввода в качестве переменной для других запросов в MySQL - PullRequest
0 голосов
/ 03 мая 2019

Я реализовал это в Python, но я надеюсь, что есть более быстрый способ сделать это в MySQL изначально.

У меня есть таблица с именем allNames. Я хотел бы взять результат запроса select для этой таблицы и передать каждую строку в качестве переменной другому запросу (который также является select).

В Python это выглядит так:

def getOccurancePerVending_Count(cur):
    try:
        cur.execute(qur.allNames)
        allNames =cur.fetchall()
        for n in allNames:
            cur.execute(qur.nameVend%(n[0]))
            count = cur.fetchone()
            print("%s,%s"%(n[0],count)
    except:
        print("Didn't work")

Это работает с python, но это невероятно медленно для очень большой базы данных. Я надеюсь, что делать это в MySQL намного быстрее.

РЕДАКТИРОВАТЬ: добавлена ​​попытка MYSQL изменить это в MySQL ...

drop procedure if exists GetFilteredData;
DELIMITER $$
CREATE PROCEDURE GetFilteredData()
BEGIN

    DECLARE bDone INT;
    DECLARE f_name varchar(150);

    DECLARE curs CURSOR FOR select fname from allNames;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bDone = 1;

    OPEN curs;

    SET bDone = 0;   
    repeat
        SET @sql = concat('select distinct(vend) from nameVend where fName =(', f_name,')');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    until bDone END REPEAT;

    close curs;
END$$
call GetFilteredData()

1 Ответ

0 голосов
/ 03 мая 2019

Это не тот способ выполнения вещей, который вам, возможно, просто необходим

select distinct(vend) 
from allNames a
join nameVend b on a.<fieldname> = b.<fieldname>;

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

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