假设我有一个包含三列primaryNum,secondaryNum,chosenNum的表。 primarynum和secondaryNum都是数字值,但selectedNum的值可以是“primaryNum”,“secondaryNum”或“both”。
selectedNum字段是一个列,它为我提供了搜索特定字段中的数字的选项。
例如:我可能想要尝试在selectedNum中存储的列中查找值为10的所有行。如果chosenNum的值为“both”,那么如果任一列(primaryNum,secondaryNum)的值为10,则返回该行。
我的选择陈述可能是什么样的?
如果我说我想做一个选择语句,那可能是一个更好的场景:
SELECT * FROM aTable WHERE(SELECT bVal FROM bTable WHERE aVal = @varField)= 0;
其中@varField是字段中值的值,其中标签存储在chosenNum中,或者如果selectedNum =“both”,则为任何一个字段
这会导致我返回ID为1,2,3,4,6,7,14,15,16,19,20,21,23,24,27的行
表A:创建
CREATE TABLE `test`.`aTable` (
`id` INT NOT NULL AUTO_INCREMENT ,
`primaryNum` INT NULL ,
`secondaryNum` INT NULL ,
`chosenNum` CHAR(12) NULL ,
PRIMARY KEY (`id`) );
表B:创建
CREATE TABLE `test`.`bTable` (
`aVal` INT NULL ,
`bVal` INT NULL );
表A:数据
INSERT INTO test.aTable VALUES (1,8,7,'secondaryNum'),(2,2,9,'secondaryNum'),(3,7,9,'both'),(4,5,1,'both'),(5,10,3,'secondaryNum'),(6,10,6,'both'),(7,7,8,'both'),(8,10,2,'primaryNum'),(9,2,1,'secondaryNum'),(10,7,2,'secondaryNum'),(11,2,2,'secondaryNum'),(12,5,1,'secondaryNum'),(13,1,6,'primaryNum'),(14,6,6,'both'),(15,4,9,'both'),(16,9,7,'primaryNum'),(17,8,3,'secondaryNum'),(18,10,7,'primaryNum'),(19,8,5,'secondaryNum'),(20,1,7,'both'),(21,7,9,'both'),(22,8,3,'primaryNum'),(23,6,2,'primaryNum'),(24,5,7,'both'),(25,2,1,'both'),(26,5,2,'secondaryNum'),(27,7,8,'primaryNum');
表B:数据
INSERT INTO test.bTable VALUES (1,1),(2,1),(3,1),(4,1),(5,0),(6,0),(7,0),(8,1),(9,0),(10,1);
答案 0 :(得分:0)
您可以这样做:
select *
from MyTable
where (chosenNum in ('both', 'primaryNum') and primaryNum = 10)
or (chosenNum in ('both', 'secondaryNum') and secondaryNum = 10)