根據值得到值相同的字段名和所在的表(mysql)

這個問題來源於一個奇怪的需求。。太長了懶得解釋了。。反正就是但願根據值找到這個值相同的字段名和所在表sql

用程序寫能夠 我不用了
直接sql寫應該不行吧 
就用存儲過程了oop

begin
declare loopIndex int;
declare sqlstr varchar(50);
declare tableLoop int;
declare tableAmount int;
set loopIndex = 0;
set tableLoop = 0;

SELECT count(TABLE_NAME) INTO tableAmount
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'DB_NAME';

WHILE tableLoop < tableAmount DO
    SELECT TABLE_NAME INTO @currentTable
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'shopnc' LIMIT tableLoop,1;
	SET tableLoop = tableLoop + 1;

    SET @getColumnAmountSql = CONCAT("SELECT count(column_name) INTO @columnAmount from information_schema.columns where table_schema = 'DB_NAME' AND table_name = '",@currentTable,"'");

	PREPARE STMT1 FROM @getColumnAmountSql;
    EXECUTE STMT1;
	
	SET loopIndex = 0;
    WHILE loopIndex < @columnAmount DO
        SET @getCurrentColumnSql = CONCAT("SELECT column_name INTO @tempColumn from information_schema.columns where table_schema = 'shopnc' AND table_name = '",@currentTable,"' LIMIT ",loopIndex,",1");

		PREPARE STMT2 FROM @getCurrentColumnSql;
	    EXECUTE STMT2;
        SET loopIndex = loopIndex+1;

        SET @getEquelValueColumnSql = CONCAT("select count(",@tempColumn,") INTO @tempValue from ",@currentTable," where ",@tempColumn," = ",memberid);

        PREPARE STMT3 FROM @getEquelValueColumnSql;
        EXECUTE STMT3;
        
        IF @tempValue > 0 THEN
            select @currentTable,@tempColumn;
        END IF;
    END WHILE;
    
END WHILE;
end

直接用的時候改掉DB_NAME就行了 還有要創建一個存儲過程先 一句命令的事不會不懂吧code

趕着下班了 先寫到這裏了 明天記得再細改了 拜拜orm

相關文章
相關標籤/搜索