我必须选择所有值,其中某些列等于一个值,但排除其他值
| ID | Name | V1 | V2 | V3 | index |
| 1 | A | 1 | NULL | 5 | 1 |
| 2 | B | 15 | NULL | 1 | 3 |
| 3 | C | 8 | 15 | 5 | 2 |
| 4 | D | 8 | 1 | 5 | 1 |
所以我有
SELECT * from table where (V1 IN (1,15) or V2 IN (1,15) or V3 IN (1,15))
如果我这样做,查询还将选择ID 1和3 ...所以我想在V1,V2,V3 NOT IN(5,8)之前排除
我想显示所有行包含1或15,但是如果还有其他值(8或5)则不显示该行。
对不起,最好的事情是: -index是具有索引的列名称V,因此V1
所以最好的方法是选择表中columnINDEX为IN(1,15)的所有行
我要显示行ID 1,因为索引列告诉列V1中有值1 我要显示行ID 2,因为索引列告诉列V3中有值1 我要显示行ID 3,因为索引列告诉列V2中有值1 行ID 4不显示,因为索引列告诉列V1中有值8
V1,V2,V3是整数类型
答案 0 :(得分:1)
尝试
SELECT *
FROM test
WHERE ( FIND_IN_SET(1, CONCAT_WS(',',V1,V2,V3))
+ FIND_IN_SET(15, CONCAT_WS(',',V1,V2,V3))
)
AND NOT ( FIND_IN_SET(5, CONCAT_WS(',',V1,V2,V3))
+ FIND_IN_SET(8, CONCAT_WS(',',V1,V2,V3))
);
答案 1 :(得分:0)
因此,您的结果本身应该是行ID 2
,对吗?
SELECT *
FROM table
WHERE (
5 NOT IN (V1,V2,V3)
AND
8 NOT IN (V1,V2,V3)
AND
(
1 IN (V1,V2,V3)
OR
15 IN (V1,V2,V3)
)
)
答案 2 :(得分:0)
如果我理解正确,则需要将所有V1 = 1或15,然后排除所有!= 5或8的V2或V3
SELECT *从表中V1 IN(1,15)和(V1 NOT IN(5,8)或V2 NOT IN(5,8)或V3 NOT IN(5,8))和V2 IN(1, 15)和(V1 NOT IN(5,8)...