mysql - 使用 except 子句的 SQL

标签 mysql

我有 2 张 table :

  • 表 1 有 4 列

    • column1 是我的 ID
    • column2 是 int
    • 第 3 列是日期
    • 第 4 列是 varchar
  • 表 2 有 5 列

    • column1 是 id
    • column2 是 int
    • column3 是 int
    • 第 4 列是 varchar
    • 第 5 列是 varchar。

这是我迄今为止的查询:

SELECT column2
FROM table1
WHERE column3 >= #today#
EXCEPT
SELECT column3
FROM table2
WHERE column2 = '2628'
ORDER BY table1.column2

当我显示结果时,它显示我想要的信息,但我希望它显示 table1、column3...

这是我的输出:(我正在使用 ColdFusion)

cfoutput query="date"
School Day - #table1column2# br
/cfoutput

47
48
49
52
53
55

我希望它像这样显示:

11/1/2018
11/2/2018
11/3/2018
11/6/2018
11/8/2018

我尝试INNER JOIN table2 ON table1.column2 = table2.column3但它似乎不起作用。
任何帮助将不胜感激。

最佳答案

您是否必须使用 except 或者不存在可以工作吗?

如果我理解你想要表1中的所有记录 除了那些与 table1 column2 上的 table2 column3 匹配的内容之外,其中 table2 的 column2 的值为 2628。

我在子查询中使用 1,因为那里返回的值并不重要。我们使用相关性将 t1 与 t2 连接起来,并将 t2 的第 2 列限制为所需的值。

由于您要查找的数据在表1中,因此不需要表2中的任何内容;我倾向于将表 2 放在 where 子句中,因为它是您想要从表 1 中查看的数据的过滤器。如果您需要 table2 中的数据,我可能会在这里使用左连接。

SELECT t1.column2, t1.column3
FROM table1 t1
WHERE t1.column3 >= #today# 
 and not exists (SELECT 1 
                FROM table2 t2
                WHERE  t1.column2 = t2.column3
                  and t2.column2 = '2628')
ORDER BY T1.column2

我不太喜欢按列排序而不显示它,因此我将其留在查询结果中。

仅当您限制为 t1.column2 和 t2.column3,然后将其用作子查询以从 t1 获取所需记录时,Except 才适用。这似乎是不需要的开销,因为不存在可以一步完成。

关于mysql - 使用 except 子句的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570781/

相关文章:

php - 在我的 HTML 中,我使用 PHP 调用的 MySQL 条目只带来第一个词

mysql - MySQL中的ORDER BY日期,收到错误

MySQL:查找过去或 future 最近的日期

MySQL触发器更新语法错误

MySQL 日期时间字段 - 无法写入日期

php - 将旧站点从 DB 更新到 MDB2 连接,出现大量调用未定义函数错误

mysqldump cron 不能使用字符 >

Mysql正则表达式问题

MySQL 显示来自 2 个表的行,表 2 中的最新数据

php - "LIMIT"使用列作为分隔符