对标题不清楚道歉,但如果没有例子,很难描述。 我有一张表可以总结如下:
Position_X Position_Y Position_Z ValuesA ValuesB ValuesC
10 30 500 value other another
5 45 2 value2 other2 another2
45 0 75 value3 other3 another3
我需要使用特定条件提取数据,但我必须提供Position_X
,Position_Y
和Position_Z
的特定组合。我手头有我要排除的组合列表。
当我使用这3个值的组合点击一行时,该行应从查询中排除。
所以我的假设查询将是(例如简化)
SELECT ValuesA, ValuesB, ValuesC FROM mytable WHERE <other parameters>
AND ... <condition here>
要参考该示例,将使用哪个查询来排除(10,30,500)和(45,0,75)的行?
请注意,我需要在实际数据上排除的值列表大约有40个3值组合。
这可能吗?
答案 0 :(得分:2)
我认为将这些组合放在一个单独的表中是有意义的。这也可以使您的查询更短。
SELECT ValuesA, ValuesB, ValuesC
FROM mytable t
WHERE other_parameter="found"
AND NOT EXISTS (SELECT * FROM CombinationsTable
WHERE t.x = x AND t.y = y AND t.z = z);
如果由于某种原因你不想使用单独的表,你会得到这样的结果:
SELECT ValuesA, ValuesB, ValuesC
FROM mytable t
WHERE other_parameter="found"
AND NOT (x = 10 AND y = 20 AND z = 30)
AND NOT (x = 20 AND y = 30 AND z = 40)
AND NOT (etc.)
答案 1 :(得分:1)
WITH
excluded_positions(position_x, position_y, position_z) AS (
VALUES (10, 30, 500),
(45, 0, 75),
...),
excluded_rowids AS (
SELECT mytable.rowid
FROM mytable
JOIN excluded_positions USING (position_x, position_y, position_z))
SELECT ValuesA, ValuesB, ValuesC
FROM mytable
WHERE ...
AND rowid NOT IN excluded_rowids