我有以下表结构。
create table t1 (
id int,
tno int
);
create table t2 (
id int,
detailno int
);
insert into t1 values (101,1);
insert into t1 values (101,2);
insert into t2 values (101,7);
insert into t2 values (101,8);
当我执行以下查询时:
select * from t1
inner join t2
on t1.id = t2.id
where t2.detailno = 8;
执行cross join
并返回
id | tno | id | detailno
101 | 1 | 101 | 8
101 | 2 | 101 | 8
它基本上是执行 Cross join
而不是inner join
。你可以帮我回复一个结果 - 因为detail id = 8
条款中有where
吗?我缩短了表结构和查询以便于理解。这是上面代码的sql小提琴。 http://sqlfiddle.com/#!9/92c98/1
答案 0 :(得分:3)
您的查询完全按照您的要求进行。
您期待的结果是什么? 如果您只想要一行,那么通过添加条件(例如
),您可以更好地使查询更具体WHERE t2.detailno = 8
AND t1.tno = 1
会更多地减少结果。
如果您不确定t1.tno
的值是什么,那么您是否可以将其作为参数传递?如果你能解释为什么你期待t1.tno = 2
,可能会更清楚。
如果您将其作为参数传递,那么您最终可能会得到类似的内容。
WHERE t2.detailno = 8
AND t1.tno = @tno
答案 1 :(得分:1)
加入按预期工作。
执行此操作以检查:
select * from t1
inner join t2
on t1.id = t2.id;
每个id都与另一个表的id进行连接,这对于join来说是正确的。
因此,如果你想要结果作为你的期望,你需要传递t1.tno并添加到where条件,因为在另一个表中有多个记录用于相同的id(t1.id)。