mysql - sql - 内部连接执行交叉连接

标签 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;

它执行一个交叉连接并返回

id | tno | id | detailno
101 | 1  | 101 |    8
101 | 2  | 101 |    8

它基本上是在执行交叉连接,而不是内部连接。你能帮我只返回一个结果吗 - 因为 detail id = 8where 子句中?为了便于理解,我缩短了表结构和查询。这是上面代码的 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/

相关文章:

javascript - 将WHM(phpmyadmin)中的MySql数据库连接到node.js

mysql - 建议我在 MySql 中查询计数——我没有得到正确的输出

sql - 对 750k 行执行 MySQL 更新查询

sql - 直接在查询时跳过身份

sql-server - 用于存储文件的数据库设计决策

sql-server - SQL Server 二进制文件存储

php - 使用PHP将多选表单中的数据存储到MYSQL

mysql - 什么是从同一个表中选择具有某些 id 而不是其他 id 的行的最佳 MySQL 语句?

sql - Adventureworks 创建脚本?

mysql - 无法使用nodejsexpress将大型PDF文件上传到mysql