sql >> Databáze >  >> RDS >> Oracle

použijte LIKE a IN s poddotazem v sql

Můžete zabalit řetězec, proti kterému se shodujete, i řetězec obsahující userid chcete najít shodu v , oddělovač, abyste zajistili shodu s úplným userid (spíše než naivně používat LIKE bez zohlednění okolních oddělovačů a shody pouze s částečným userid ). Takhle:

SELECT *
FROM   "USER" u
WHERE  EXISTS (
  SELECT 1
  FROM   special_user su
  WHERE  ', ' || u.userpeers || ', ' LIKE '%, ' || su.userId || ', %'
)

Což pro ukázková data:

CREATE TABLE "USER" ( UserID, UserPeers, Gender ) AS
SELECT 'Mike',  'Tom1, Bob1',   'M' FROM DUAL UNION ALL
SELECT 'John',  'Tom1, Greg1',  'M' FROM DUAL UNION ALL
SELECT 'Sally', 'Mike1, John1', 'F' FROM DUAL UNION ALL
SELECT 'Sara',  'Sally1, Bob1, TimTom1', 'F' FROM DUAL;

CREATE TABLE special_user ( UserID ) AS
SELECT 'Tom1' FROM DUAL UNION ALL
SELECT 'John1' FROM DUAL;

Poznámka:Změnil jsem Sally přidat peer TimTom1 který by neměl odpovídat, i když Tom1 podřetězec je zahrnut.

Které výstupy:

db<>fiddle zde



  1. Nejúčinnější způsob klonování databáze AWS RDS?

  2. Urychlete vkládání velkých datových sad ze souboru txt do mySQL pomocí pythonu

  3. Jak zjistím, kdy byla uložená procedura naposledy upravena nebo zkompilována v Oracle?

  4. Problém s oprávněním SQL Server 2008 OPENROWSET