sql使用except子句

0pizxfdo  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(314)

我有两张table:
表1有4列
第1栏是我的id
第2列为int
第3栏是日期
第4列是varchar
表2有5列
列1是id
第2列为int
第3列为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 但它似乎不起作用。
任何帮助都将不胜感激。

bq9c1y66

bq9c1y661#

你一定要用电脑吗 except 或者一个 not exists 工作?
如果我知道您需要表1中的所有记录,除了表1列2中与表2列3匹配的记录,其中表2的列2的值为2628。
我在子查询中使用1,因为返回的值并不重要。我们使用相关性将t1连接到t2,并将t2的第2列限制为所需的值。
因为你要找的数据在表1中,而表2中不需要任何东西;我倾向于将表2放在where子句中,因为它是您希望从表1中看到的数据的过滤器。如果您需要表2中的数据,我可能会在这里使用左连接。

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才会在这里起作用。这似乎是不必要的开销,因为不存在可以做到这一步。

相关问题