2012-04-27 27 views
2

如何使用SELECT語法內WHERE,比如我有下面的代碼:選擇語法中的WHERE

SELECT 
    blah...blah.. 
    ... 
WHERE 
(
    (APM_AlertsAndReportsData.ApplicationName = 'instance: tomcat6_noram (SNMP)') AND 
    (APM_AlertsAndReportsData.ComponentName = 'Memory Heap Used (B)') AND 
    (APM_AlertsAndReportsData.StatisticData >= 1908932600) 
) 

我在這裏,如果比較值,該值大於或等於1908932600。我想用SELECT代替1908932600,所以它會自動比較值而不是查詢中的靜態代碼。

+1

請問'SELECT'仍然只返回一個結果嗎?如果你期望更多的結果,那麼你需要另一種方式來做到這一點(無論是「JOIN」還是「EXISTS」) – Lamak 2012-04-27 15:38:52

+0

你是對的,我會讓它成爲單一的價值回報。 – Satish 2012-04-27 16:45:25

回答

4

您可以使用子查詢,你只需要括號圍繞它:

APM_AlertsAndReportsData.StatisticData >= (SELECT ... FROM ...) 

注意,它可能會運行緩慢取決於你在你的子查詢正在做什麼。改用JOIN可能會更好。

+2

並瞭解多個值可能會導致錯誤! – 2012-04-27 15:38:40

+0

是sql server中需要的前1名?我以爲你有其他明智的錯誤。 (因爲即使你知道它只會返回一個結果)還是隻是爲了賦值給變量 – gordatron 2012-04-27 15:39:44

+2

@gordatron:否:http://sqlfiddle.com/#!3/eb2e9/2 – 2012-04-27 15:44:44

3

你需要在WHERE子句中 「相關子查詢」:

WHERE 
(
    (APM_AlertsAndReportsData.ApplicationName = 'instance: tomcat6_noram (SNMP)') AND 
    (APM_AlertsAndReportsData.ComponentName = 'Memory Heap Used (B)') AND 
    (APM_AlertsAndReportsData.StatisticData >= (SELECT SomeValue FROM SomeTable)) 
) 
2

這裏是一個簡單的:

單值子查詢

select * from Table1 
where id = (select id from Table2 where Name = 'cool') 

穆蒂值子查詢

select * from Table1 
where id IN (select id from Table2 where Name LIKE 'A%') 

select * from Table1 
where id NOT IN (select id from Table2 where Name LIKE 'A%') 

Corralated子查詢

select * from Table1 
where exists (select 1 from Table2 where Table1.id = Table2.id)