MYSQL utiliser' LIKE 'dans' WHERE ' clause pour rechercher dans subquery

comment utiliseriez-vous' LIKE ' pour rechercher dans un sous-jeu?

E. g. j'ai essayé de le faire, mais ne fonctionne pas:

SELECT *
FROM mytable
WHERE name
    LIKE '%
        (SELECT name FROM myothertable)
        %'

j'ai ceci:

SELECT * FROM t1
WHERE t1.name IN (SELECT t2.name FROM t2)
AND (t1.title IN (SELECT t2.title FROM t2)
    OR t1.surname IN (SELECT t2.surname FROM t2))

Ça fonctionne ok, de retour exacte de matchs, mais il ne semble pas retourner mes autres enregistrements qui sont semblables, donc je voudrais aussi vérifier que:



t1.titre comme " % t2.titre% " et t1.nom de famille comme ' % t2.nom de famille%'



Comment puis-je faire?

14
demandé sur Bill the Lizard 2012-04-05 07:34:09

7 réponses

utilisation D'une jointure:

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON a.name LIKE CONCAT('%', b.name, '%')

...mais il peut y avoir des doublons, s'il y a plus d'une correspondance dans myothertable pour un mytable enregistrement.

Using EXISTS:

SELECT a.*
  FROM mytable a
 WHERE EXISTS (SELECT NULL 
                 FROM myothertable b 
                WHERE a.name LIKE CONCAT('%', b.name, '%'))

en utilisant Recherche En Texte Intégral MATCH (il faut myothertable is MyISAM)

SELECT a.*
  FROM mytable a
  JOIN myothertable b ON MATCH(a.name) AGAINST (b.name)
19
répondu OMG Ponies 2012-04-05 03:46:13

Par exemple:

SELECT a_column
FROM   mytable t
WHERE  EXISTS (
           SELECT 1
           FROM   myothertable ot
           WHERE  t.`name` LIKE '%' || ot.`name` || '%');

pour ce qui est de la terminologie: c'est ce qu'on appelle une sous-espèce corrélée.

11
répondu bernie 2012-04-05 03:38:40

la meilleure façon serait de créer une fonction appelée NameMatch ()

Requête Finale:

SELECT * FROM mytable  WHERE dbo.NameMatch(name) = 1  

La fonction :

create function dbo.NameMatch 
(@_name varchar(100))
returns bit 
as  begin

    declare @res bit 
    if exists (select 1 from myothertable where @_name like '%' + name + '%' )
     set @res = 1
    else set @res  = 0
    return @res

end
0
répondu Dhananjay 2012-04-05 04:45:17

Il a Travaillé POUR MOI

SELECT *
FROM mytable
WHERE name
LIKE CONCAT('%',(SELECT name FROM myothertable),'%')
0
répondu Muhammad Haseeb Khan 2013-02-15 11:28:37

sélectionner * à partir de t1 Où t1.nom dans (sélectionnez t2.nom du t2) Et (t1.titre (sélectionnez t2.titre de t2) Ou t1.nom de famille (sélectionnez t2.nom de famille de t2))

0
répondu Bellevue Esaie 2013-08-16 01:51:15

Juste une autre façon:

select a.field, b.code
from table1 a 
inner join (select code from table2 where ....) b on a.field like CONCAT('%', b.code, '%')
0
répondu David 2014-09-05 07:55:47

cette chaîne fonctionne très bien pour moi.

"SELECT * FROM table1 WHERE field like CONCAT (' %', (SELECT id FROM table2), '%')";

0
répondu Leo Barbas 2016-07-08 12:38:31