繁体   English   中英

使用except子句的SQL

[英]SQL using the except clause

我有2张桌子:

  • 表1有4列

    • column1是我的ID
    • column2是int
    • column3是日期
    • column4是varchar
  • 表2有5列

    • column1是ID
    • column2是int
    • column3是int
    • column4是varchar
    • column5是varchar。

到目前为止,这是我的查询:

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

当我显示结果时,它会显示我想要的信息,但是我希望它显示表1,列3…

这是我的输出:(我正在使用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.column3INNER JOIN table2 ON table1.column2 = table2.column3但是它似乎不起作用。
任何帮助,将不胜感激。

您是否必须使用exceptnot exists作品?

如果我理解您想要来自table1的所有记录,除了那些匹配table1 column2上的table2 column3的记录,其中table2的column2的值为2628。

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

因为您要查找的数据在表1中,而表2中则不需要任何数据; 我倾向于将表2放在where子句中,因为它是对要从table1中查看的数据的过滤器。 如果您需要来自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才在这里起作用。 似乎不需要的开销(假设不存在)可以一步完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM