【问题标题】:Select single ID in SQL statement with multiple criteria [duplicate]在具有多个条件的 SQL 语句中选择单个 ID [重复]
【发布时间】:2014-06-25 23:29:53
【问题描述】:

我想获取包含 %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 

【问题讨论】:

  • 您使用的是什么特定的数据库(SQL Server、MySQL、Oracle 等)?
  • 如果您找到了解决方案,请将其发布为答案。问题中没有答案。

标签: sql


【解决方案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

【讨论】:

  • 你需要select a.post_id,而不是a_id。而1 hasValue 部分是多余的。
【解决方案2】:

因为结果被拆分到多条记录中(没有一条记录同时包含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%'

【讨论】:

    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2017-09-28
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多