我喜欢使用另一个查询的结果来处理列名。为此,我喜欢使用CONCAT()。但不知怎么的,它不起作用;当我运行这条线时,我得到0行:
SELECT * FROM cover WHERE CONCAT('c','9') = 1;
当我不能充分利用CONCAT()时:
SELECT * FROM cover WHERE c9 = 1;
而且CONCAT()似乎也起作用。这样我就得到了一个结果:
SELECT CONCAT('c','9');
我试过了这个问题的所有解决方法:
MySQL select with CONCAT condition
就像这个,但我总是有0行:

SELECT * FROM (
  SELECT id, CONCAT('c', '9') as target
  FROM cover) base
WHERE target = "1"

我的MySQL版本是;10.1.16-MariaDB

最佳答案

将数组分散在一堆列上是不好的模式设计。而且,正如您所发现的,很难使用列。为c值构建另一个表。
或者。。。
对于许多0/1“列”,请考虑SETBIGINT UNSIGNED;其中一个将在一小部分空间中最多容纳64个布尔标志。而且,使用不同的代码,可以使用BLOB
要从BIGINT中提取位22,((col >> 22) & 1)将给您0或1。

08-06 03:05
查看更多