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'
)
3 Réponses :
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));
Je préfère généralement garder les conditions code> code> dans la clause SO: P> > sur code> et sans utiliser case code> pour les expressions booléennes. 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))
);
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 code>), 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.