问题描述
MysqL-使用SELECT查找特定数据
我正在寻找一种方法,可以执行一些SELECT并仅从数据库中返回特定数据,这是数据的示例:
+----+------+--------+--------+--------+
| ID | name | value1 | value2 | value3 |
+----+------+--------+--------+--------+
| 1 | aaaa | aaaa | Yes | True |
| 2 | aaaa | bbbb | Yes | False |
| 3 | aaaa | cccc | Yes | True |
| 4 | aaaa | dddd | Yes | False |
| 5 | aaaa | eeee | Yes | False |
| 6 | bbbb | NULL | Yes | True |
| 7 | bbbb | NULL | Yes | False |
| 8 | bbbb | NULL | Yes | True |
| 9 | bbbb | NULL | Yes | False |
| 10 | cccc | ffff | No | True |
| 11 | cccc | ffff | No | False |
| 12 | cccc | ffff | No | True |
| 13 | cccc | ffff | No | False |
| 14 | cccc | gggg | Yes | True |
| 15 | cccc | gggg | Yes | False |
| 16 | cccc | gggg | Yes | True |
| 17 | cccc | gggg | Yes | False |
+----+------+--------+--------+--------+
这是我期望的结果:
结果1(第一次选择):
+----+------+--------+--------+--------+
| ID | name | value1 | value2 | value3 |
+----+------+--------+--------+--------+
| 1 | aaaa | aaaa | Yes | True |
| 2 | aaaa | bbbb | Yes | False |
| 3 | aaaa | cccc | Yes | True |
| 4 | aaaa | dddd | Yes | False |
| 5 | aaaa | eeee | Yes | False |
| 6 | bbbb | NULL | Yes | True |
| 10 | cccc | ffff | No | True |
| 14 | cccc | gggg | Yes | True |
+----+------+--------+--------+--------+
注意:
-
列名结果必须遵循以下限制:
-
列value1的结果必须遵循以下限制:
-
列value2的结果没有限制。
结果2(第二个SELECT):
+----+------+--------+--------+--------+
| ID | name | value1 | value2 | value3 |
+----+------+--------+--------+--------+
| 1 | aaaa | aaaa | Yes | True |
| 3 | aaaa | cccc | Yes | True |
| 6 | bbbb | NULL | Yes | True |
| 10 | cccc | ffff | No | True |
| 14 | cccc | gggg | Yes | True |
+----+------+--------+--------+--------+
注意:
-
列名结果必须遵循以下限制:
-
列value1的结果必须遵循以下限制:
-
列value2的结果没有限制。
-
列value3的结果必须遵循以下限制:
- value3必须为TRUE。
不幸的是,在我自己使用disTINCT进行SELECT的一些测试之后,我再也没有办法解决这个问题了,有人可以帮我解决这个问题吗?
测试1:
select distinct name
from table1
评论: 不考虑value1的限制。
测试2:
SELECT r.name,(SELECT COUNT(disTINCT t2.id)
FROM table1 t2
WHERE t2.value1 <> ''
) as cnt
FROM (SELECT table1.name FROM table1) r;
评论: 不考虑value1的限制。我试图用count来查看返回结果的数量,我的生产环境有14000左右行。
我不是您可能猜到的MysqL专家。
感谢您的时间和帮助,非常感谢。
编辑:为了清楚起见,我更改了value2中的列值,并完全重写了notes部分。
解决方法
结果1:
SELECT
ID,name,value1,value2,CASE value3 WHEN 0 THEN 'False' ELSE 'True' END as value3
FROM specificData
WHERE value2 IS NULL or value2 ='aaaa';
reault1的输出(基于您的输入数据):
+------+------+--------+--------+--------+
| ID | name | value1 | value2 | value3 |
+------+------+--------+--------+--------+
| 1 | aaaa | aaaa | NULL | True |
| 2 | aaaa | bbbb | NULL | False |
| 3 | aaaa | cccc | NULL | True |
| 4 | aaaa | dddd | NULL | False |
| 5 | aaaa | eeee | NULL | False |
| 6 | bbbb | NULL | aaaa | True |
| 10 | cccc | aaaa | aaaa | True |
| 14 | cccc | bbbb | aaaa | True |
+------+------+--------+--------+--------+
结果2:
SELECT
ID,CASE value3 WHEN 0 THEN 'False' ELSE 'True' END as value3
FROM specificData
WHERE (value2 IS NULL or value2 ='aaaa')
AND value3;
result2的输出(基于您的输入数据)
+------+------+--------+--------+--------+
| ID | name | value1 | value2 | value3 |
+------+------+--------+--------+--------+
| 1 | aaaa | aaaa | NULL | True |
| 3 | aaaa | cccc | NULL | True |
| 6 | bbbb | NULL | aaaa | True |
| 10 | cccc | aaaa | aaaa | True |
| 14 | cccc | bbbb | aaaa | True |
+------+------+--------+--------+--------+
免责声明: 尽管以上结果符合期望的输出,但不能保证查询是您所需要的!这是因为描述非常不清楚。
最后一个脚本来生成您的测试数据(如果其他人需要此?):
CREATE TABLE specificData (ID INTEGER,name VARCHAR(10),value1 VARCHAR(10),value2 VARCHAR(10),value3 Boolean);
INSERT INTO specificData VALUES
(1,'aaaa',NULL,True),(2,'bbbb',False),(3,'cccc',(4,'dddd',(5,'eeee',(6,(7,(8,(9,(10,(11,(12,(13,(14,(15,(16,(17,False);