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