我喜欢使用另一个查询的结果来处理列名。为此,我喜欢使用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“列”,请考虑SET
或BIGINT UNSIGNED
;其中一个将在一小部分空间中最多容纳64个布尔标志。而且,使用不同的代码,可以使用BLOB
。
要从BIGINT
中提取位22,((col >> 22) & 1)
将给您0或1。