2013-08-28 21 views
0

我希望我的DB到的兩個條件之一的,返回行:獲取參考掌握選擇行中嵌套查詢

  1. 的行中包含特定value「VAL」,是type「sometype。這時候」
  2. 有是其他行,那麼type「sometype」和name與當前選中的行相同。

爲此,我做了如下因素查詢:

SELECT c.name, c.value, c.type 
    FROM `table` AS c 
    WHERE 
     c.type='sometype' AND c.value='val' 
     OR 
     c.type='othertype' AND 
     0<(SELECT count(*) FROM `table` AS d WHERE d.name=c.name and c.name='sometype') 

不幸的是,這將返回 'othertype' 的所有行。我只想要這些,有相同的名稱和類型'sometype'的朋友。
我認爲問題是,我不知道如何得到在熟練檢查行(我相信是c.fieldname)的值的參考。我相信d.name = c.name會返回與當前選中的行相同名稱的所有行。但是嵌套選擇始終是>0

回答

1

我想這應該對你在做什麼工作,改寫:

SELECT c.name, c.type, c.value 
FROM test as c 
INNER JOIN (SELECT name, type 
      FROM test 
      WHERE type = "type1" 
      AND value = 3) as d 
ON c.name = d.name AND c.type = d.type; 

SQLFiddle:http://sqlfiddle.com/#!2/63255/1

內選擇得到你的#1,其中type =「sometype」和value =「val」。然後,外層獲取與內層選擇的名稱和類型相對應的名稱,類型和值,這是您的#2。

+0

它像一個魅力工作,非常感謝你:) –

+0

很高興聽到,不是一個問題! – Tricky12

0
SELECT c.name 
    , c.value 
    , c.type 
    FROM table c 
WHERE (c.type = 'sometype' AND c.value = 'val') 
    OR (c.type = 'othertype' AND 0< (SELECT COUNT(*) FROM `table` d WHERE d.name = c.name AND c.name='sometype')); 

也考慮沒有子查詢

+0

爲什麼它說'... d.name = c.name和c.name ='sometype'...'?我的意思是「c.name」和「sometype」在這裏的關係是什麼? –