2015-05-25 53 views
0

我在table1.idtable2.parent_id之間有一對多關係表,並且想根據table2.status選擇table1.id驗證INNER JOIN中的所有行都具有值

SELECT table1.id FROM table1 
    INNER JOIN table2 ON table2.parent_id = table1.id 
WHERE table2.status = 1 

這確實幾乎我想要的,如果只有一個關係table2。但是如果在table2中有更多行,則其中一個結果可能有status=1,但另一個結果爲status=2

我想要的是得到的結果爲table1.id只有所有導致table2status=1

示例;

table1 
    id=1, name=row1 
    id=2, name=row2 

table2 
    id=1, parent_id=1, status=1 
    id=2, parent_id=1, status=2 
    id=3, parent_id=2, status=1 
    id=4, parent_id=2, status=1 

在上面的例子中table1.id = 1有不同的狀態2間的關係,我不希望此行。 table1.id = 2但是有相同的status=1有2個關係,我想要這個結果。

回答

0

您可以使用EXISTSNOT EXISTS檢查另一個表中的值。

此查詢選擇從表1中的所有行那些具有匹配表2中的記錄,但這些都不比1

SELECT * 
FROM Table1 t1 
WHERE -- Check for matching records in Table2. 
     EXISTS 
     (SELECT 'x' FROM Table2 t2 
      WHERE t2.parent_id = t1.id) 
     -- Skip rows that have a status different than 1. 
     AND NOT EXISTS 
     (SELECT 'x' FROM Table2 t2 
      WHERE t2.parent_id = t1.id 
      AND t2.status <> 1) 

我不知道你想有,如果有什麼不同的狀態完全不是表2中的狀態。如果要從表1返回表2中沒有任何匹配行的行,則可以省略第一個EXIST <subselect>部分。

+0

謝謝,我馬上試試! – Daniel