我无法了解以下需求。示例表如下。
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')
代码并不完美,但它对我有效,我认为这个想法应该很清楚。