我有 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/