2016-06-09 86 views
-1

我有一個表ocmsreservenow像下面,MySQL的:在查詢工作不正常

+-----------------+ 
| cmsreservenowid | 
+-----------------+ 
|    1 | 
|    2 | 
|    3 | 
|    4 | 
|    5 | 
|    7 | 
|    8 | 
|    6 | 
|    9 | 
+-----------------+ 

當我寫的查詢選擇一些值,

select 
    cmsreservenowid 
from 
    ocmsreservenow 
where 
    cmsreservenowid in (1 , 1, 2); 

它產生像

輸出
+-----------------+ 
| cmsreservenowid | 
+-----------------+ 
|    1 | 
|    2 | 
+-----------------+ 

我期待的是

+-----------------+ 
| cmsreservenowid | 
+-----------------+ 
|    1 | 
|    1 | 
|    2 | 
+-----------------+ 

請澄清一下爲什麼它不會產生我預期的輸出?

+5

這裏只有一個1,返回行... – jarlh

+0

[IN子句(HTTP://開發。 mysql.com/doc/refman/5.7/en/comparison-operators.html#function_in)檢查列的值是否在指定的值。 –

+0

因爲它的想法是這樣的:'好的,他給了我1-9個號碼,我只需要返回1或1或2,確定只有2個值符合這個條件。然後你看到結果 – GONG

回答

1

where子句過濾器行。它不會生成他們。因此,對於表中的每一行,您的where子句將檢查cmsreservenowid是否在指定的列表中。如果爲true,則返回該行;如果爲false(或NULL),則不返回該行。

沒有重複的機會。

如果你想複製,然後你想join:在這種情況下,left join

select ids.id 
from (select 1 as id union all select 1 union all select 2 
    ) ids left join 
    ocmsreservenow o 
    on o.cmsreservenowid = ids.id;