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 が複数ある場合にエラーを記述する方法ですか?
次の記述方法を参照できます。
2 番目の書き方についてですが、内部結合について理解していますか?以下の書き方の方が分かりやすいでしょうか?
条件は 2 つです、兄貴、b2.name='栄光と夢' および b1.cid = b2.cid
これを 2 つの異なるテーブルと考えてください。これは自己結合です。
@broken Mirror これは正しい解決策です。最初にデカルト集合、次にフィルターです。これが実装原則です。ただし、通常、この種のステートメント SQL は自動的に最適化されます。実際には、最初にデカルト積を実行してからフィルターをかけるわけではありません。