1

假设我有一个包含三列primaryNum、secondaryNum、selectedNum 的表。primarynum 和 secondaryNum 都是数值,但 selectedNum 的值可以是“primaryNum”、“secondaryNum”或“both”。

selectedNum 字段是一个列,可让我选择在特定字段中搜索数字。

例如:我可能想尝试在 selectedNum 中存储的列中查找值为 10 的所有行。如果 selectedNum 的值为“both”,则如果任一列(primaryNum,secondaryNum)的值为 10,则将返回该行。

我的 select 语句可能是什么样的?



如果我说我想做一个 select 语句,这可能是一个更好的场景:

SELECT * FROM aTable WHERE (SELECT bVal 从 bTable WHERE aVal = @varField ) = 0;

其中@varField 是字段中的值的值,其标签存储在 selectedNum 或任一字段中,如果 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);
4

1 回答 1

0

你可以这样做:

select * 
from MyTable
where (chosenNum in ('both', 'primaryNum') and primaryNum = 10)
    or (chosenNum in ('both', 'secondaryNum') and secondaryNum = 10)
于 2012-10-22T14:52:53.833 回答