SELECT
id,
name,
cid
from
shbooks
where
cid=(
SELECT
cid
FROM
shbooks
where
name= '光荣与梦想'
);
上面这个我完全看得懂,返回<光荣与梦想>的cid,然后用这个值作为条件,匹配整个表的cid;
SELECT
b1.id,
b1.name,
b1.cid
from
shbooks b1,
shbooks b2
where
b1.cid=b2.cid
and
b2.name='光荣与梦想';
但是这个,条件是 b1.cid=b2.cid 的话,会返回整个表,为什么加上个 b2.name='光荣与梦想' 就能返回 和 光荣与梦想 相同cid 的别的书???
答案不在长,也不在语言是不是准确,只要让我能明白怎么个逻辑就行了..谢谢了!
原始
條件b1.cid = b2.cid(從9個結果過濾得到5個結果)只要理解為什麼是9個結果,整個問題應該也沒有什麼疑問了。
條件 b2.name='光榮與夢想'
就得到
你的第一種寫法如果存在多條cid是不是就出錯了?
你可以參考下面的寫法:
至於你的第二種寫法,你了解inner join嗎?你看看下面的寫法是不是更好懂?
條件是兩個啊大兄弟,b2.name='光榮與夢想' 同時 b1.cid = b2.cid
看成兩個不同的表就行,這是自聯接
@碎鏡 他的是正解,先笛卡爾集,然後進行篩選。這是實現原理。不過一般這種語句SQL會自動最佳化。並不會真的先做出笛卡爾積然後再篩選。