2017-06-30 25 views
0

我有以下查詢:選擇吸空的子查詢,給人怪異的結果

SELECT * FROM `table1` WHERE `id` IN 
     (
      SELECT `table1_id` FROM `table2` WHERE `id` in 
      (
       SELECT `table2_id` FROM `table3` WHERE `customer_id` = 57 
      ) 
     ) 

它返回10行(50)
但查詢

SELECT `table1_id` FROM `table2` WHERE `id` in 
    (
     SELECT `table2_id` FROM `table3` WHERE `customer_id` = 57 
    ) 

返回0行(哪個是對的)。
那麼,我的第一個查詢如何返回幾行,而它應該返回0(如子查詢)。

如果我使用應該返回第二個查詢中的行的customer_id,則所有事情都應該如此。

所以我的問題是爲什麼:
爲什麼查詢返回的行,而子查詢不?

+0

你不能只是加盟'table2','table3'並在'WHERE落實'customer_id' '而不是嵌套多個子查詢? – Santi

+0

@Abhi這不是一個相關的子查詢。 – Barmar

+0

如果真的發生這種情況,聽起來像是一個錯誤。你能提供一些示範數據來證明它嗎? – Barmar

回答

1

這應該是相同的查詢條款避免

支票resul

SELECT DISTINCT `table1`.* 
    FROM `table1` 
    INNER JOIN `table2` ON `table1`.`id` = `table2`.`table1_id` 
    INNER JOIN `table3` ON `table2`.`id` = `table3`.`table2_id` 
    and `table3`.`customer_id` = 57 
+0

將其更改爲'SELECT DISTINCT table1。*'。否則,它將返回其他兩個表中的所有列,並且如果有多個匹配,它會多次返回同一行。 – Barmar

+0

@Barmar謝謝..答案更新了你的建議.. – scaisEdge