mysql in 用法誤區

2021-09-30 09:34:21 字數 1284 閱讀 6914

問題1: 

select * from a where a.bigclass in(select arrchild from b) 這樣子為什麼查不到資料,但是寫成

select * from a where a.bigclass in(1,2,35,5) 這樣子就可以。

注:select arrchild from b 的查詢結果是一條記錄內容是一字串(1,2,35,5)

解決方案及解析:

select arrchild from b 的查詢結果是一條記錄內容是一字串(1,2,35,5)

這種情況下,

執行select * from a where a.bigclass in(select arrchild from b)

相當於執行

select * from a where a.bigclass in(  '1,2,35,5'  )

結果肯定是沒有。

假如你的

select arrchild from b 的查詢結果是12

354這樣的 4 行資料。

那麼select * from a where a.bigclass in(select arrchild from b)

就等價於

select * from a where a.bigclass in(1,2,35,5)

如果select arrchild from b 的查詢結果是一條記錄內容是一字串(1,2,35,5)

又要實現

select * from a where a.bigclass in(1,2,35,5)  的效果。

乙個變通的辦法是:

select * from a

where

instr (  concat ( ','  ,  (select arrchild from b)  , ',' ),   

concat (','  ,   a.bigclass  , ',' ) ) > 0

方案二:(原創)

將select arrchild from b 的查詢結果 存入到乙個陣列中比如存到  $result

再將$result陣列用逗號分割出來

$ arr = implode(',' , $result);

然後執行要查詢的語句:

$sql = 'select * from a where a.bigclass in(' . $arr . ')';

就可以查詢了。原理和方案一的乙個道理

mysql in子句 MySQL IN 子句

可以使用 in 子句代替許多 or 條件。要想理解 in 子句,還以表 employee tbl 為例,它的所有記錄如下所示 mysql select from employee tbl id name work date daily typing pages 1 john 2007 01 24 2...

Mysql In子句刪除

經測試mysql in子句中只能放一級子查詢,後來改用虛表,測試可用,記錄下 begin create table temptable1 as select zpwas.stock id from zen products with attributes stock as zpwas where z...

Mysql in 排序問題

select from table where id in 3,6,9,1,2,5,8,7 這樣的情況取出來後,其實,id還是按1,2,3,4,5,6,7,8,9,排序的,但如果我們真要按in裡面的順序排序怎麼辦?sql能不能完成?是否需要取回來後再foreach一下?其實可以這樣 select f...