sql - 执行交叉连接的内连接

时间:2015-05-28 12:44:09

标签: mysql sql sql-server join

我有以下表结构。

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

2 个答案:

答案 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)。