我无法了解以下要求。示例表如下。
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_fk& adid_fk。 " id"应该等于did_fk&以及adid_fk。如果其中任何一个不是真的,那么我应该得到那一行。我需要得到第4行和第4行。 5.Since" _fk"列不等于" id" value.Problem是" _fk"列不固定。但是" id"名称是固定的。
答案 0 :(得分:0)
SELECT * FROM `test` WHERE `Id` != `did_fk` OR `Id` != `adid_fk`
答案 1 :(得分:0)
如果您的动态列以_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')
代码并不完美,但它适用于我,我认为理念应该是明确的。