2013-05-16 39 views
2

這裏SQL的極端新手。有沒有更簡單的方法來做到這一點?SQL簡單和替代?

SELECT event_type, flow, userid 
FROM checkpoints_esc 
WHERE date='2013-05-14' AND event_type='flow_started' AND flow='1921474754' 
    OR flow='3326882819' OR flow='1916289507' OR flow='2121958995' 
    OR flow='2142167604' 
LIMIT 1000; 

希望SQL有事數組列表,如:

MyFlows = @[1921474754, 3326882819, 1916289507, 2121958995, 2142167604] 
WHERE date='2013-05-14' AND event_type='flow_started' AND @MyFlows 
+0

你應該知道它在SQL中是* not * true,AND在OR之前綁定。因此,所寫的查詢可能不會返回您期望的結果 - 它將包括流='2142167604',無論日期或event_type。 –

+0

謝謝@LarryLustig。我使用了以下頂部答案中的查詢:WHERE date ='2013-05-14'AND event_type ='flow_started' AND flow IN('1921474754','3326882819','1916289507','2121958995','2142167604' )這應該照顧綁定順序問題 – user1899415

回答

9

可以使用IN關鍵字:

SELECT event_type, flow, userid 
FROM checkpoints_esc 
WHERE date='2013-05-14' AND event_type='flow_started' 
AND flow IN ('1921474754', '3326882819', '1916289507', '2121958995', '2142167604') 
LIMIT 1000; 
+0

真棒,謝謝! – user1899415

1

雖然IN詞可能會是比較合適在這裏,你可以也使用一個表變量並加入它:

DECLARE @T1 Table 
(
    Flow VARCHAR(50) 
) 

INSERT INTO @T1 VALUES ('1921474754') 
INSERT INTO @T1 VALUES ('3326882819') 
... 
INSERT INTO @T1 VALUES ('2142167604') 

SELECT event_type, flow, userid 
FROM checkpoints_esc 
INNER JOIN @T1 T1 on T1.Flow = checkpoints_esc.Flow 
WHERE date='2013-05-14' AND event_type='flow_started' 

LIMIT 1000; 

我沒有真正測試這個錯別字,但我認爲它的工作原理。就像我前面所說的那樣,IN關鍵字可能適合你在這個例子中更好