如何动态比较我的sql列



我无法了解以下需求。示例表如下。

CREATE TABLE `test` (
  `Id` INT NOT NULL,
  `Name` VARCHAR(45) NULL,
  `did_fk` INT NULL,
  `adid_fk` INT NULL,
  PRIMARY KEY (`Id`));
INSERT INTO test (id,name,did_fk,adid_fk) 
VALUES
(1,'Rajesh',1,1),
(2,'Neeli',2,2),
(3,'Satish',3,3),
(4,'Ganesh',4,5),
(5,'Murali',9,10);

这里我需要将"id"与_fk列进行比较,即did_;adid_fk。"id"应该等于did_fk&以及adid_fk。如果其中任何一个都不是真的,那么我应该得到那场争吵。在这里我需要得到第4&5.由于"_fk"列不等于"id"值。问题是未修复"_fk"列。但"id"名称是固定的。

SELECT * FROM `test` WHERE `Id` != `did_fk` OR `Id` != `adid_fk`

如果您的动态列以_fk或其他后缀结尾,您可以尝试创建类似以下的SP

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetNonEqualFkValues`(IN tableName varchar(255))
BEGIN
DECLARE c_name VARCHAR(255);
DECLARE done INT DEFAULT FALSE;
DECLARE curs CURSOR FOR select column_name from information_schema.columns where column_name like '%_fk';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN curs;
SET @q = concat("SELECT * FROM ", tableName, " WHERE 1!=1 ");
get_col: LOOP
FETCH curs INTO c_name;
IF done THEN 
LEAVE get_col;
END IF;
SET @q = CONCAT(@q, " OR ", c_name," != id");
END LOOP get_col;
 PREPARE stmt1 FROM @q;
  EXECUTE stmt1;
END

然后调用这样的具体表格

call GetNonEqualFkValues('test')

代码并不完美,但它对我有效,我认为这个想法应该很清楚。

相关内容

  • 没有找到相关文章

最新更新