2017-06-08 18 views
0

我試圖從我的第一個表中選擇一堆行取決於我的第二個表中的值。問題與一個IN內的SELECT語句

爲了實現這一點,我想出了以下查詢:

SELECT * 

FROM table2 t2 
WHERE t2.id IN(

    SELECT subquery.id 

    FROM 
    (

     SELECT id 

     FROM table1 t1 
     WHERE (t1.property=10 AND t1.value=0) 

    ) AS subquery 

    INNER JOIN 
    (

     SELECT id 

     FROM table1 t1 
     WHERE (t1.property=20 AND i.value=1) 

    ) AS subquery2 

    on subquery.id=subquery2.id 

) 

表1ID的具體名單取決於財產價值將被選定爲用作最終的條件選擇表2

子查詢本身正在工作,我測試了它,我可以檢索到好的id

+------+ 
| id | 
|------| 
| 18 | 
| 55 | 
¦  ¦ 

問題是,所述IN不工作時,在最終的端SELECT我檢索從表2的代替的那些尊重具有相同ID爲一體的狀態的所有行先前檢索的子查詢。

+------+------+--- 
| id | name | 
|------|------|--- 
| 1 | xx | 
| 2 | yy | 
¦  ¦  ¦ 

所以我的問題是:

  • 爲什麼子查詢忽略了我的說法,是有辦法繞過這個問題?

編輯

這裏是一個SQLFiddle的要求,但奇怪的是,我張貼的代碼工作在這裏,但不是我的數據庫。

+0

卡恩請你創建一個http://sqlfiddle.com/證明行爲 – Jens

回答

0
SELECT * FROM table2 t2 
INNER JOIN 
    (SELECT 
      subquery.id 
     FROM 
      (SELECT 
       id 
      FROM 
       table1 t1 
      WHERE 
       (t1.property = 10 AND t1.value = 0)) AS subquery 
       INNER JOIN 
      (SELECT 
       id 
      FROM 
       table1 t1 
      WHERE 
       (t1.property = 20 AND i.value = 1)) AS subquery2 ON subquery.id = subquery2.id)Z ON Z.id=t2.id 

您可以嘗試上面的代碼。 希望這會有所幫助。

+0

試了一下,沒有工作,它不斷從表2 – DuffautM

+0

讓所有的行可以提供你O/P用於'SELECT subquery.id FROM (SELECT ID FROM 表1 T1 WHERE (t1.property = 10 AND t1.value = 0))AS子查詢 INNER JOIN (SELECT ID FROM表1 T1 WHERE (t1.property = 20,i.value = 1))AS subquery2 ON subquery.id = subquery2.id' –

0

請嘗試如下;如果columnn中有任何空值,您將無法獲得預期的結果。

common_id not in 
(
    select common_id from Table1 
    where common_id is not null 
) 

SQL "select where not in subquery" returns no results

+0

雖然我沒有在任何NULL列,我試過了,結果仍然是一樣的 – DuffautM