的号码,我旁边有近似的表结构:T-SQL查询,以检查存在物
accounts:
ID INT,
owner_id INT,
currency_id TINYINT
相关
clients:
ID INT
和
currency_types:
ID TINYINT,
name NVARCHAR(25)
我需要写一个存储过程检查是否存在具有特定货币和所有其他货币的账户,即客户可以使用特定货币账户和其他账户encies和两者。
我已经写此查询:
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]
是否有可能进行优化呢?我是(T)SQL的新手,非常感谢!
@ AdaTheDev:我是新来的SQL,所以只是担心,因为查询有3个SELECTs ..和两个WHERE条件非常相似,所以也许他们可以拆分成单一但复杂的东西。 – abatishchev 2010-02-13 20:44:07
外部选择不会花费太多(可忽略)。为了实现你想要的,我实际上认为这种方法很好 - 看不到一个简单的方法来达到同样的结果。复杂性通常会使事情变得更糟,因为它可能使SQL Server更难以优化查询 – AdaTheDev 2010-02-13 21:14:26