J'ai la prochaine structure des tables approximatives:requête T-SQL pour vérifier nombre d'existences
accounts:
ID INT,
owner_id INT,
currency_id TINYINT
liés à
clients:
ID INT
et
currency_types:
ID TINYINT,
name NVARCHAR(25)
Je dois écrire une procédure stockée vérifier l'existence de comptes avec une devise spécifique et tous les autres, c.-à-d. le client peut avoir des comptes dans une devise spécifique, d'autres encies et les deux.
Je l'ai déjà écrit cette requête:
SELECT
ISNULL((
SELECT 1
WHERE EXISTS
(
SELECT 1
FROM [accounts] AS A, [currency_types] AS CT
WHERE
A.[owner_id] = @client -- sp param
AND A.[currency_id] = CT.[ID]
AND CT.[name] = N'Ruble'
)), 0) AS [ruble],
ISNULL((
SELECT 1
WHERE EXISTS
(
SELECT A.[ID]
FROM [accounts] AS A, [currency_types] AS CT
WHERE
A.[owner_id] = @client
AND A.[currency_id] = CT.[ID]
AND CT.[name] != N'Ruble'
)), 0) AS [foreign]
Est-il possible d'optimiser? Je suis nouveau à (T) SQL, donc merci d'avance!
@ AdaTheDev: Je suis nouveau sur SQL, donc il suffit de s'inquiéter car la requête a 3 SELECTs .. et les deux conditions WHERE sont très similaires donc peut-être qu'ils pourraient être divisés en quelque chose de simple mais complexe. – abatishchev
La sélection externe ne coûtera pas du tout (négligeable). Pour atteindre ce que vous voulez, je pense réellement que l'approche est bonne - ne peut pas voir un moyen facile d'atteindre le même résultat. La complexité, en général, aggrave les choses, car il peut être plus difficile pour SQL Server d'optimiser la requête. – AdaTheDev