我有以下表结构。
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;
它执行一个交叉连接
并返回
id | tno | id | detailno
101 | 1 | 101 | 8
101 | 2 | 101 | 8
它基本上是在执行交叉连接
,而不是内部连接
。你能帮我只返回一个结果吗 - 因为 detail id = 8
在 where
子句中?为了便于理解,我缩短了表结构和查询。这是上面代码的 sql fiddle 。 http://sqlfiddle.com/#!9/92c98/1
最佳答案
您的查询完全按照您的要求执行。
您期望的结果是什么? 如果您只想要一行,那么也许您最好通过添加诸如
之类的条件来使查询更具体WHERE t2.detailno = 8
AND t1.tno = 1
这会进一步减少结果。
编辑
如果您不确定 t1.tno
的值是什么,那么您可以不将其作为参数传递吗?如果您能解释为什么您期望 t1.tno = 2
,可能会更清楚。
如果您将它作为参数传入,您可能会得到类似这样的结果。
WHERE t2.detailno = 8
AND t1.tno = @tno
关于mysql - sql - 内部连接执行交叉连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506951/