#mysql
#mysql
Вопрос:
Допустим, я запрашиваю это:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like 'coduser';
он возвращает список таблиц, который содержит столбец «coduser»:
users
messages
passwords
photos
Это список элементов 20 .
Мне нужно выполнить поиск по этим таблицам во всех вхождениях, где «coduser» равно «5OEWP1BPSV».
SELECT * FROM tablenamehere WHERE coduser = "5OEWP1BPSV";
но я не использую для этого ничего, кроме MySQL.
В основном просто выполните поиск по всем таблицам, где есть столбец с именем «coduser» и coduser = «5OEWP1BPSV».
Комментарии:
1. Вы имеете в виду, что «valueofcollumnhere» должно быть динамическим?
2. @P.Salmon нет, это статично.
3. Тогда нет вопросов.. ваш запрос будет работать нормально.
4. ну, он не возвращает все значения «статического значения здесь» в этих таблицах :/
5. Докажите это .. дайте мне несколько примеров имен таблиц и фактический код запроса, который вы использовали.
Ответ №1:
Вам нужно будет использовать динамический sql, и, учитывая небольшие задействованные числа, курсор будет уместен
drop table if exists t,t1;
create table t(id int auto_increment primary key , codeuser varchar(20));
create table t1(id int auto_increment primary key , codeuser varchar(20));
insert into t(codeuser) values
('aaa'),('5OEWP1BPSV');
insert into t(codeuser) values
('bbb');
drop procedure if exists p;
delimiter $$
create procedure p()
begin
declare tablename varchar(20);
declare finished int;
DECLARE GRD_CUR CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like 'codeuser';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINISHED = 0;
OPEN GRD_CUR;
LOOPROWS:LOOP
FETCH GRD_CUR INTO tablename;
IF FINISHED = 0 THEN
LEAVE LOOPROWS;
END IF;
#build and execute dynamic sql
set @sql = concat('SELECT * FROM ' , tablename, ' WHERE codeuser = "5OEWP1BPSV"');
#select @sql;
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
END LOOP;
close grd_cur;
end $$
delimiter ;
call p();
Ответ №2:
Перебирайте возвращенный список таблиц и для каждой таблицы в этом списке выполните
SELECT *
WHERE columnnamehere = "valueofcolumnhere";
Имейте в виду, что это даст вам отдельные списки для каждой таблицы в этом цикле FOR, поэтому вам придется каким-то образом объединить их, чтобы получить полный список.
Комментарии:
1. о, как мне выполнить цикл?
2. @Wiliam Brochensque junior — перестаньте извиняться, все начинают с невежества.
3. Зависит от того, какой язык вы используете, но вам понадобится цикл FOR. Найдите в Интернете учебное пособие по циклам FOR для языка, который вы используете.
4. @ollieyeahlong — это конкретный вопрос mysql, и ответом должен быть mysql.
5. я просто использую mysl. Или это невозможно только с mysql?