我有2张桌子:
表1有4列
表2有5列
这是我到目前为止的查询:
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.column3
,但似乎不起作用。
任何帮助将不胜感激。
答案 0 :(得分:0)
您必须使用except
还是可以使用not 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获取记录时,例外才在这里起作用。似乎不需要的开销(假设不存在)可以一步完成。