2014-03-26 35 views
0

包括獲取值我有這個表:SQL查詢:從某個閾值

PATH:

idTokenN idPath token  isTV 
    1  p1  test1  true 
    2  p1  test2  false 
    3  p2  test3  true 
    4  p3  test4  false 
    5  p3  test5  false 
    6  p4  test6  false 
    7  p4  test7  true 
    8  p4  test8  false 
    9  p4  test9  false 
    10  p5  test10  true 
    11  p5  test11  false 
    12  p5  test12  false 

關係:

idTokenN idTokenN2 rel 
     10  11   test 

我想獲得idPath包括至少一個值Istv「true」和idPath包括通過某個閾值,即通過設置最小值和最大值。例如,如果徵收的最小值:2,最大3 idPath長我只得到2和3之間:

idPath token isTV rel 
     p1 test1 true null 
     p1 test2 false null 
     p5 test10 true test 
     p5 test11 false null 
     p5 test12 false null 
我這個查詢,並在它的工作原理部分嘗試,我不知道如何設置要採取的idPath的範圍:

SELECT path.idPath, path.token, path.isTV,relation.rel 
FROM path 
    LEFT OUTER JOIN relation ON(path.idTokenN=relation.idTokenN) 
WHERE path.idPath IN (
     SELECT path.idPath FROM path WHERE path.isTV='true'); 
+0

您可能要添加您正在使用的DBMS。 –

+0

我正在使用MYSQL! – user3438154

回答

1

爲什麼不是這個?

SELECT path.idPath, path.token, path.isTV,relation.rel 
FROM path 
LEFT OUTER JOIN relation ON (path.idTokenN=relation.idTokenN) 
WHERE path.idPath IN(SELECT DISTINCT path.idPath FROM path WHERE path.isTV='true') 
AND path.idPath IN(SELECT DISTINCT path.idPath FROM path GROUP BY path.idPath HAVING COUNT(*) >= 2 AND COUNT(*) <= 3) 
+0

謝謝!有什麼方法可以加快查詢速度嗎?例如首先選擇值的範圍,然後僅在那些用途上:SELECT DISTINCT path.idPath FROM path WHERE path.isTV ='true' – user3438154

0
SELECT 
    path.idPath, 
    path.token, 
    path.isTV,relation.rel 
FROM path 
LEFT OUTER JOIN relation 
    ON(path.idTokenN=relation.idTokenN) 
GROUP BY idPath 
HAVING SUM(isTV='true')>0 
    AND COUNT(DISTINCT path.idTokenN) BETWEEN 2 AND 3