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会自动优化。并不会真的先做出笛卡尔积然后进行筛选。