选择MySQL值,其中value等于一个值但不等于其他值

时间:2020-02-25 16:15:34

标签: mysql

我必须选择所有值,其中某些列等于一个值,但排除其他值

|   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是整数类型

3 个答案:

答案 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)...