0
votes

SQL pour sélectionner des enregistrements lorsque deux valeurs d'une table sont toutes deux présentes sous forme de sous-chaînes dans un champ de texte dans une deuxième table.

SELECT
    TableOne.LName, TableOne.FName, TableOne.FileType, TableTwo.Name
WHERE
    (TableTwo.Name LIKE *LName* AND TableTwo.name LIKE *FName*)
    AND
    (IF TableOne FileType = 'A' THEN
        TableTwo.FileType = '1'
     ELSE IF TableOne FileType = 'B' THEN
        TableTwo.FileType = '2' OR TableTwo.FileType = '3'
    )

2 commentaires

C'est un problème assez moche à avoir à gérer de SQL, en particulier SQL Server. Le problème est qu'il y a tant de cas de bord à prendre en compte. Par exemple, il peut ne pas être un deuxième prénom. Le nom de famille peut être deux mots (par exemple van Damme ), il peut donc ne pas être possible de distinguer un nom de famille deux mots et un seul intermédiaire et nom de famille. Vous devrez peut-être faire du travail manuel ici.


Merci @TimbieGeleisen m'empêche de me sentir aussi stupide que je l'ai été. Nous sommes vos exemples de noms - c'est pourquoi je me suis installé sur la simple approche générique. C'est assez bon (en démarrage) pour savoir simplement que les prénoms et les noms de famille sont tous deux présents comme des sous-chaînes du champ Nom.


3 Réponses :


4
votes

Si vous voulez seulement vérifier si les noms de premier et dernier nom apparaissent sous forme de sous-chaînes, n'importe où, dans le nom complet de la deuxième table, nous pouvons essayer la join simple suivante:

SELECT
    t1.LName,
    t1.FName,
    t1.FileType,
    t2.Name
FROM TableOne t1
INNER JOIN TableTwo t2
    ON PATINDEX('%' + t1.FName + '%', t2.Name) > 0 AND
       PATINDEX('%' + t1.LName + '%', t2.Name) > 0
WHERE
    (t1.FILETYPE = 'A' AND t2.FILETYPE = 1) OR
    (t1.FILETYPE = 'B' AND t2.FILETYPE IN (2, 3));


0 commentaires

1
votes

Essayez: xxx

Demo


0 commentaires

1
votes

Je préfère généralement garder les conditions code> code> dans la clause sur code> et sans utiliser case code> pour les expressions booléennes.

SO: P> >

SELECT t1.LName, t1.FName, t1.FileType, t2.Name
FROM TableOne t1 JOIN
     TableTwo t2
     ON t2.Name LIKE '%' + LName + '%' AND  
        t2.name LIKE '%' + FName + '%' AND
        ((t1.FileType = 'A' AND t2.FileType = 1) OR
         (t1.FileType = 'B' AND t2.FileType IN (2, 3))
        );


0 commentaires