Je ne pense pas que ces requêtes répondent à la question. Ma compréhension est qu'une recherche sur 'John%' devrait retourner les employés avec le nom de famille John, Johnson, etc. SEULEMENT s'il n'y avait aucun employé avec le prénom John, Johnny, etc.Toutes les requêtes afficheront à la fois John Adams et Lyndon Johnson si la table contient les deux, mais seul John Adams devrait apparaître, car les noms de famille ne doivent correspondre que s'il n'y a pas de prénoms correspondants.
Voici une proposition utilisant la syntaxe SQL Server. Il devrait être possible d'écrire cela dans d'autres dialectes de SQL:
select top (1) with ties
FirstName, LastName, ID
from (
select
0 as SearchLastNames,
FirstName, LastName, ID
from EMPLOYEE
where FirstName like 'Test%'
union all
select
1 as SearchLastNames,
FirstName, LastName, ID
from EMPLOYEE
where LastName like 'Test%'
) as T
order by SearchLastNames;
S'il y a des prénoms correspondant à la valeur de SearchLastNames plus petit sera 0, et le TOP (1) avec des liens .. commande par SearchLastNames sera renvoie des informations uniquement pour les correspondances de prénom (où SearchLastNames est 0).
S'il n'y a pas de prénoms correspondants, la seule valeur SearchLastNames sera 1. Dans ce cas, TOP retournera des informations pour toutes les correspondances de nom (où SearchLastNames vaut 1), s'il y en a.
Un plus maladroit, mais plus de solution portable est ceci:
select
FirstName, LastName, ID
from EMPLOYEE
where FirstName like 'Test%'
union all
select
FirstName, LastName, ID
from EMPLOYEE
where LastName like 'Test%'
and not exists (
select
FirstName, LastName, ID
from EMPLOYEE
where FirstName like 'Test%'
);
Je ne pense pas que vous devez vous soucier de la surcharge de l'écriture de deux appels de base de données. – Juliet
Tant que FirstName et LastName sont tous les deux indexés, à peu près n'importe quelle requête nonstupid sera suffisamment efficace (sauf si votre base de données a des millions d'entrées). – Brian
"donc sélectionnez * de Employé où Prénom = 'test%' ou Nom = 'test'% '. Wont' travail '. Si vous voulez toujours les enregistrements lorsque FirstName correspond (quel que soit le nom LastName), alors il s'agit bien de la requête. Voir ma réponse pour plus de détails. –