mysql - SQL "IN"与 WHERE 子句中的 "="组合

标签 mysql sql

我正在为别人的代码而苦苦挣扎。 WHERE 子句在以下 (MySQL) 语句中可能做什么?

    SELECT * FROM t1, t2 WHERE t1.id = t2.id IN (1,2,3)

在我的案例中,它没有提供预期的结果,但我试图弄清楚原作者的意图。 任何人都可以提供使用这样的 WHERE 子句的示例吗?

最佳答案

此条件从右开始,评估 t2.id IN (1,2,3),获取结果(0 或 1),并将其用于与 t1 的连接。编号IN 列表中具有 idt2 的所有行都连接到 t1 中具有 的行id 之一; t2 的所有其他行都与 t1id 为零的行连接。这是关于 sqlfiddle.com 的一个小演示: link .

很难想象这是作者的意图,但是:我认为更可能的检查是两个项目都在列表中,并且彼此相等。彼此相等很重要,因为看起来作者想要连接这两个表。

一种更现代的连接方式是使用 ANSI SQL 语法。这是您在 ANSI SQL 中的等效查询:

SELECT * FROM t1 JOIN t2 ON t1.id = t2.id IN (1,2,3)

关于mysql - SQL "IN"与 WHERE 子句中的 "="组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14151631/

相关文章:

mysql - 何时使用左外连接?

sql - 优化左连接表上的 OR 查询

sql - 数据库中的日期格式在 vb.net 中获取错误的日期

php - MySQL 查询不只输出结果标题

mysql - 如何按键分区和子分区MySQL?

php - 如何使用 php 从多行表单更新 mysql 数据库

MySQL:统计一个值连续出现的次数

mysql - 通过 Spring Boot 应用程序连接到远程数据库

mysql - 在没有 EAV 的情况下存储属性/选项数据

mysql - 需要查询从另一个表中的多个字段中提取不同的数字列表