sql >> Database >  >> RDS >> Oracle

gebruik LIKE en IN met subquery in sql

U kunt zowel de tekenreeks waar u mee overeenkomt als de tekenreeks met de userid . laten inlopen u wilt matchen in de , scheidingsteken zodat u zeker weet dat u overeenkomt met een volledig userid (in plaats van naïef LIKE te gebruiken zonder rekening te houden met de omringende scheidingstekens en alleen te matchen met een gedeeltelijke userid ). Zoals dit:

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

Wat, voor de voorbeeldgegevens:

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;

Opmerking:ik heb Sally gewijzigd om een ​​peer toe te voegen TimTom1 die niet overeenkomen, ook al is de Tom1 subtekenreeks is inbegrepen.

Welke uitgangen:

db<>fiddle hier



  1. Hulp bij bijwerken van PHP- en MySQL-paginatie

  2. rails mysql adapter fout

  3. alternatief voor mysql_field_name in mysqli

  4. Gegevens importeren in een MySQL-database