2016-09-15 159 views
-1

讓的說我想創造這樣的事情SQL SELECT語句中的情況下

select t.*, 
     (case when (select name from table2 where idtable2 = t.idtable1)= NULL then '0' 
     end) as result 
from table1 t 

我該怎麼辦呢? 謝謝

對不起我的錯誤,是這句話它works..but它不工作,如果有這樣的情形語句之前的子查詢..

選擇T *(請從表3,其中idtable3名= t.idtable3)作爲nametable3, (情況下(請從表2,其中idtable2 = t.idtable1名)= NULL,則 '0' 結束)作爲結果 從表1牛逼

+0

這應該工作,但可能需要一個'LIMIT 1';但通常(並不總是)加快兩個表的連接並直接使用該值。 – Uueerdo

+1

你應該解釋你想要的邏輯。 –

+1

正在返回表中每一行的查詢的SELECT列表中的相關子查詢。如果table1包含一百萬行,則該子查詢將被執行一百萬次。 *不寒而慄*。 (當我說......「一個meeelyon行」時,我很想將我的小指放在我嘴角,邪惡博士的風格。) – spencer7593

回答

3

我想你想要exists

select t.*, 
     (case when not exists (select 1 
           from table2 t2 
           where t2.idtable2 = t.idtable1 
          ) 
      then '0' 
     end) as result 
from table1 t; 

或者,您的查詢將與is null工作:

select t.*, 
     (case when (select t2.name 
        from table2 t2 
        where t2.idtable2 = t.idtable1 
       ) is null 
      then '0' 
     end) as result 
from table1 t; 

這假設子查詢返回一行。

0

假設table2的idtable2值始終是唯一的,您可以對table2執行左連接,而不是子查詢。

CREATE TABLE #table1 
(
    idtable1 INT 
    ,someValue varchar(25) 
) 

CREATE TABLE #table2 
(
    idtable2 INT 
    ,name varchar(25) 
) 


INSERT INTO #table1 values(1,'a'),(2,'b'),(3,'c'),(4,'d') 
INSERT INTO #table2 values(1,'Bob'),(2,'Kim'),(3,'Fred'),(5,'Sally') 

SELECT t.* 
    ,CASE 
     WHEN t2.NAME IS NULL 
      THEN '0' 
     END AS Result 
FROM #table1 t 
LEFT JOIN #table2 t2 
    ON t.idtable1 = t2.idtable2