在SQL语句中选择具有多个条件的单个ID

时间:2014-06-25 14:41:55

标签: sql

我希望获得包含%planet%和%world的帖子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 

2 个答案:

答案 0 :(得分:1)

这将满足您的需求。加入了两个查询。第一个获取包含planet的列表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

答案 1 :(得分:0)

因为结果分为多个记录(没有一条记录包含planetworld,但对于单个post_id,两者都可以在post_id 94中找到你需要一个两步法。

忽略性能问题,以下内容将为您提供预期的结果(SQL Server):

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%'