Compruebe si la matriz de la columna de texto contiene una cadena que contiene una frase

Łukasz Jagodziński

Tengo una mesa customerscon la estructura como:

id: int
products: text[]

Me gustaría crear una consulta SQL que verifique si hay un producto con un nombre que contenga la frase "a" pero que no contenga la frase "b", así que básicamente: product ILIKE "%a%" AND product NOT ILIKE "%b%"

Si quiero verificar la existencia del elemento, entonces es tan simple como usar el @>operador, pero aquí probé con UNNESTmuchos enfoques diferentes y nada parece funcionar.

Solo quiero incluir una fila de cliente determinada o no dependiendo de esta condición. Puedes ayudar con eso?

Probé cosas como:

SELECT
  *
FROM
  customers,
  UNNEST(products) AS product
WHERE
  product ILIKE '%a%' AND product NOT ILIKE '%b%';

o

SELECT
  *
FROM
  customers
LEFT JOIN LATERAL (
  SELECT * FROM UNNEST(products) AS element
) AS products2 ON TRUE
WHERE
  element ILIKE '%a%' AND element NOT ILIKE '%b%';

En teoría, podría hacer algo como:

products::TEXT ILIKE '%a%' AND products::TEXT NOT ILIKE '%b%'

Pero ese es un truco feo que no siempre funcionará

Gordon Linoff

Yo recomendaria:

select c.*
from customers c
where exists (select 1
              from unnest(c.products) p
              where p like '%a%'
             ) and
      not exists (select 1
                  from unnest(c.products) p
                  where p like '%b%'
                 );

Usted puede hacer esto con un solo UNNEST. Simplemente parece más complicado:

select c.*
from customers c
where (select countif(p like '%a%') = count(*) and
              countif(p like '%b%') = 0
       from unnest(c.products) p
       where p like '%a%' or p like '%b%'
      ) ;

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Compruebe si la columna pandas contiene todos los elementos de una lista

Establecer una columna de indicador dependiendo de si la columna contiene una cadena dada

Compruebe si la columna de tupla en pandas contiene algún valor de una lista

Compruebe si la cadena contiene un elemento de la matriz que ignora el caso (JavaScript)

Compruebe si un elemento de la lista de Python contiene una cadena dentro de otra cadena

Compruebe si una lista contiene elementos de la otra

Compruebe si una matriz JSON de Postgres contiene una cadena

Compruebe si la lista contiene un elemento que contiene una cadena y obtenga ese elemento

Compruebe si la fila contiene una casilla de verificación

Compruebe si la columna de tipo de matriz contiene nulo

Compruebe si la cadena contiene una subcadena de 3 caracteres de otra cadena

Compruebe si la cadena contiene una coincidencia en la lista de filtros de rango Enumerable.

Compruebe si el cuadro de texto contiene al menos una frase, luego haga algo una vez

Eliminar si la matriz contiene una cadena de otra matriz

Compruebe si una cadena contiene algún elemento de la matriz

Compruebe si la matriz de PHP contiene una cadena no específica

Compruebe si la matriz contiene al menos un valor de una cadena

PHP: compruebe si la cadena contiene la misma palabra más de una vez

Compruebe si la lista de matrices contiene una determinada cadena y un entero

Compruebe si la cadena de palabras contiene una dirección de correo electrónico

Compruebe si la lista contiene una cadena que coincida estrechamente

Compruebe si la matriz contiene una matriz

Compruebe si la entrada de usuario contiene una subcadena

Python Pandas: compruebe si la serie contiene una cadena de la lista

Python: compruebe si la cadena en una lista de cadenas no contiene una variable

Compruebe si la matriz contiene una instancia de una clase en particular en TypeScript

Compruebe si el diccionario contiene una determinada cadena de la salida del comando

Compruebe si la matriz de objetos contiene todos los valores de una matriz de enteros

Compruebe si la matriz contiene una matriz

TOP Lista

CalienteEtiquetas

Archivo