1

(こちらを読むとよくわかります)

このクエリを最適化できるかどうかを知りたいです:

SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p1 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p2 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p3 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p4 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p5 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p6 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p7 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p8 AND id_action_set = 1
4

2 に答える 2

6

試す:

SELECT id_type, value 
FROM Action, Action_set 
WHERE id_action IN (id_action_p1,id_action_p2,id_action_p3,id_action_p4,id_action_p5,id_action_p6,id_action_p7,id_action_p8) 
AND id_action_set = 1

複数の行がある場合は、次を試してください。

SELECT id_type, value 
FROM Action, Action_set 
WHERE (id_action = id_action_p1
     OR id_action = id_action_p2
     OR id_action = id_action_p3
     OR id_action = id_action_p4
     OR id_action = id_action_p5
     OR id_action = id_action_p6
     OR id_action = id_action_p7
     OR id_action = id_action_p8) 
AND id_action_set = 1
于 2012-06-20T15:06:23.650 に答える
0

わかった; まず、クエリが期待どおりに機能しません。アクションの 1 つに 3 つのアクション セットがあるとします。id_action_p1id_action_p2、およびid_action_p3。これはUnion All、id_type も value も id_action に依存しないため、クエリの 3 つの異なる項目に表示されるが、同じ値を持つことを意味します。

これが意図されている場合、単に or を使用することはできません - 一致するのは 1 回だけです - しかし、それらを区別する方法がないまま複数回アイテムを返すことになり、これは奇妙に思えます。それが意図されている場合は、テーブル自体にアイテムのリストを持ち、それを結合することで、より簡単にすることができます。

まず、テーブルをセットアップします。

Select into Table_name id_action_p1 as action
Insert into Table_name (Select id_action_p2)
Insert into Table_name (Select id_action_p3)
Insert into Table_name (Select id_action_p4)
Insert into Table_name (Select id_action_p5)
...

次に、新しいクエリを書きます。

SELECT id_type, value 
FROM Action, Action_set, Table_name 
WHERE id_action=Table_name.action
AND id_action_set = 1

これは、前のクエリが行うこととまったく同じです。

于 2012-06-21T15:49:54.270 に答える