2014-06-25 73 views
1

我想獲取包含%planet%和%world的帖子ID。在具有多個條件的SQL語句中選擇單個ID

有了這個聲明,我會得到一個單一的94作爲post_id。

當前問題可能的複製是這個帖子:SQL: how to select a single id ("row") that meets multiple criteria from a single column

我似乎無法弄清楚如何使用LIKE語句。

post_id Meta   Value 

96  Hello World 123 
96  Hello World 123 
92  Hello World 123 
93  Hello World 123 
93  Hello World 123 
94  Hello World 123 
94  Hello Planet 1234 
94  Hello World 
95  Hello World 
95  Hello World 
+1

你正在使用什麼特定的數據庫(SQL Server,MySQL,Oracle等)? –

+0

如果您找到了解決方案,請將其作爲答案發布。答案不在問題中。 – Kermit

回答

0

,因爲結果在多個記錄分割(沒有一個記錄包含兩個planetworld,但是對於單post_id兩者都在post_id 94如發現),你需要一個兩步走的方法。

忽略性能問題,下面就爲您預期的結果(SQL服務器):

DECLARE @MyTable TABLE 
(
    post_id INT, 
    Meta VARCHAR(100), 
    Value INT 
) 

INSERT INTO @MyTable 
     (post_id, Meta, Value) 
VALUES (96, 'Hello World', 123), 
     (96, 'Hello World', 123), 
     (92, 'Hello World', 123), 
     (93, 'Hello World', 123), 
     (93, 'Hello World', 123), 
     (94, 'Hello World', 123), 
     (94, 'Hello Planet', 1234), 
     (94, 'Hello World', NULL), 
     (95, 'Hello World', NULL), 
     (95, 'Hello World', NULL) 

SELECT DISTINCT post_id 
    FROM @MyTable 
    WHERE post_id IN (SELECT DISTINCT post_id FROM @MyTable WHERE [Meta] LIKE '%planet%') 
    AND [Meta] LIKE '%world%' 
1

這會做你的需要。這是兩個查詢加入。首先獲取包含星球的列表ID。其次獲得與世界的列表ID。我將兩者結合在一起,這意味着必須在兩個查詢中返回。

select a.post_id from 
(select post_id from t1 where meta like '%planet%' group by post_id) a 
join 
(select post_id from t1 where meta like '%world%' group by post_id) b 
on a.post_id = b.post_id 
+0

您需要'選擇a.post_id',而不是'a_id'。而'1 hasValue'部分是多餘的。 –