如何使用LIKE运算符为多个值以及还使用LIMIT编写SQL查询

问题描述

我想用LIKE运算符编写SQL查询几个值,也要使用LIMIT。所以,当我尝试这个:

var xpath1 = "//div[@aria-label='Add food' and data-tooltip='Add food']/span"
webDriver.findElement<WebElement>(By.xpath(xpath1)).click()

我没有两个值。我得到具有两行的数据帧,其中两行中的消息相等,是由user1发出的请求。我怎么写正确?

期望的结果是:

SELECT class,message
FROM my_data
WHERE message LIKE '%request was made%' AND message LIKE '%received an answer%'
LIMIT 2

我以后使用此r代码

class               message
request        request was made by user1
received       received an answer by user114

我的数据如下:

df <- dbGetQuery(dbConnect(...),stri_encode(sql,to = "UTF-8")) %>%
  as.data.frame()

解决方法

考虑使用neighbor功能:

SELECT result.1 as class,result.2 as message
FROM (
  SELECT arrayJoin([(class,message),(next_row_class,next_row_message)]) as result
  FROM (
    SELECT class,message,neighbor(class,1) next_row_class,neighbor(message,1) next_row_message
    FROM (
      /* emulate origin data */
      SELECT data.1 as date,data.2 as class,data.3 as message
      FROM (SELECT arrayJoin(
        [('2020-11-01','request ','request was made by user1'),('2020-11-01','received','received an answer by user114'),'request','request was made by user45'),'error','error with messages occurred'),'request was made by user413'),'received an answer by user056'),'received an answer by user77'),'update','data was updated')]) as data))
    )
  WHERE message LIKE '%request was made%' AND next_row_message LIKE '%received an answer%'
  )
LIMIT 2  

/*
┌─class────┬─message───────────────────────┐
│ request  │ request was made by user1     │
│ received │ received an answer by user114 │
└──────────┴───────────────────────────────┘
*/
,

你们都需要

  1. AND替换为OR;和
  2. 包括限制为user1的逻辑,它必须在查询中。

我将演示使用sqldf只是为了获得快速的sql查询,但这在任何DBMS中都适用。

sqldf::sqldf(
  "select * from df
   where message like '%user1%'
     AND (
       message LIKE '%request was made%'
       OR message LIKE '%received an answer%'
     )
   limit 2")
#         date    class                       message
# 1 2020-11-01  request     request was made by user1
# 2 2020-11-01 received received an answer by user114

数据:

df <- structure(list(date = c("2020-11-01","2020-11-01","2020-11-01"),class = c("request","received","request","error","update"),message = c("request was made by user1","received an answer by user114","request was made by user45","error with messages occurred","request was made by user413","received an answer by user056","received an answer by user77","data was updated")),row.names = c(NA,-10L),class = "data.frame")
,

也许您需要这样的东西?

NumberFormatException
,

尝试以下操作:

SELECT DISTINCT class,message
FROM my_data
WHERE message LIKE '%request was made%'
   OR message LIKE '%received an answer%'
LIMIT 2

我在想DISTINCT可以保留重复的类,消息组合以显示在输出中。另外,您还需要一个OR或一个AND,因为没有一条记录可以同时满足这两个条件(至少在您显示的示例数据中)。

注意-在每种情况下都行不通,因为在您收到“收到答案”之前,您可能有两个不同的“请求”。

,

只需将AND替换为OR,您的查询将为:

SELECT class,message
FROM my_data
WHERE message LIKE '%request was made%' OR message LIKE '%received an answer%'
LIMIT 2