2014-02-22 100 views
-1

我試圖選擇那些列中具有特定值的記錄。考慮下面的例子:選擇列中具有特定值的那些記錄

NAME VALUETEST 

rec1 val1 
rec2 val1 
rec3 val1 
rec1 test123 
rec1 test1234 
rec2 test1234 

在這裏,我希望只選擇那些具有valuetest列值VAL1,test123只有test1234,即REC1記錄。我已經嘗試了下面的簡單選擇查詢,但它沒有給我想要的結果 查詢:select * from temp where valuetest = all ('val1','test123','test1234');

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

0

我懷疑這是你想要什麼:

select name from temp where valuetest = 'val1' 
intersect 
select name from temp where valuetest = 'test123' 
intersect 
select name from temp where valuetest = 'test1234' 

如果要從列表中選擇更多列而不僅僅是名稱,請運行:

select * from temp where name in(
    select name from temp where valuetest = 'val1' 
    intersect 
    select name from temp where valuetest = 'test123' 
    intersect 
    select name from temp where valuetest = 'test1234') 
+0

感謝您的答案似乎給了我正確的結果,但我想知道我的查詢有什麼問題? –

+0

單個值不能同時爲X,Y和Z.但是,單個值可以高於或低於X,Y和Z.即當通常使用ALL/ANY時。見http://www.oracle-base.com/articles/misc/all-any-some-comparison-conditions-in-sql.php –

+0

另一種看待它的方法是:你需要一個「name」的值在一個表名稱值至少有一行的valuetest值爲「X」,「Y」在另一行(不是同一行),「Z」在另一行(不是同一行)。 –

0

這個查詢是否給你想要的結果?

select * 
from temp 
where valuetest in ('val1', 'test123', 'test1234'); 
+0

你的答案給了我所有具有任何一個valuestest的記錄,而我只需要那些具有所有3個valuetest值的記錄。 –

0

SELECT * FROM temp其中valuetest IN( 'VAL1', 'test123', 'test1234');

或使用可以使用

SELECT * FROM temp其中valuetest = ANY( 'VAL1', 'test123', 'test1234');

使用代替任何所有因爲所有其試圖匹配所有三個值中的單個記錄

+0

你的答案給了我所有有任何一個valuestest的記錄,而我只想要那些具有所有3個valuetest值的記錄。 –

1

這應做到:

SELECT name, COUNT(*) 
FROM temp 
WHERE valuetest IN ('val1','test123','test1234') 
GROUP BY name 
HAVING COUNT(*) = 3; 

它會檢索所有NAME S作爲val1test123test1234匹配。

如果你確實需要的所有行,而不僅僅是名字,你應該使用一個JOIN

SELECT * 
FROM temp 
INNER JOIN (
    SELECT name, COUNT(*) 
    FROM temp 
    WHERE valuetest IN ('val1','test123','test1234') 
    GROUP BY name 
    HAVING COUNT(*) = 3 
) USING(name); 

而且,這種方法會掃描該表只不管值從條件數的2倍('val1','test123','test1234',...

+1

,但它將消除每個名稱中包含所有這3個值的任何其他行,這可能會引起您的興趣。當然,這個問題的細節很少,但這是一個限制。 –

+0

我同意,但考慮到上下文,唯一感興趣的價值似乎是'NAME'。無論哪種方式我的查詢可以很容易地調整,以適應這一要求。感謝您指出(我更新了我的答案)。 – Razvan

相關問題