sql与条件不匹配的键
这几乎是一种左连接的情况,但我不知道如何用sql表示它。 考虑使用字段用户、项、标志的表命令。我们需要一个出现在表中但没有Flag=True行的用户列表。这些字段都没有空值。相当地,用户的所有行中都有Flag=False,并且存在这样的行 我会天真地写道: 选择T1.User FROM Orders AS T1 LEFT JOIN Orders AS T2 ON T1.User=T2.User,其中T2.Flag=TRUE,T2.User为NULL 选择右侧的行,然后检查联接是否没有匹配项,但这当然不起作用,因为它将两个条件应用于右侧的行 我试过: 选择T1.User FROM Orders作为T1,其中T1.User不在选择DISTINCT User FROM Orders,其中Flag=TRUE 但是在MicrosoftAccess上,这是非常慢的,好像第一行的每一行都在运行第二个selectsql与条件不匹配的键,sql,select,join,ms-access-2013,Sql,Select,Join,Ms Access 2013,这几乎是一种左连接的情况,但我不知道如何用sql表示它。 考虑使用字段用户、项、标志的表命令。我们需要一个出现在表中但没有Flag=True行的用户列表。这些字段都没有空值。相当地,用户的所有行中都有Flag=False,并且存在这样的行 我会天真地写道: 选择T1.User FROM Orders AS T1 LEFT JOIN Orders AS T2 ON T1.User=T2.User,其中T2.Flag=TRUE,T2.User为NULL 选择右侧的行,然后检查联接是否没有匹配项,但这
到目前为止,唯一的解决方案是从第二个select创建一个临时表。但这是一个如此简单的问题,必须有一个好的方法用sql来表达它。如果这是显而易见的,道歉;我仍然在摸索sql的复杂语义。您的子查询解决方案很好,我无法想象为什么它很慢,除非您有索引问题。至于您的问题,我不确定我是否完全理解,但是如果您有将筛选条件应用于两个表的问题,请尝试将该条件添加到连接条件中,而不是WHERE子句中
SELECT T1.User
FROM Orders AS T1
LEFT JOIN Orders AS T2
ON T1.User=T2.User
AND T2.Flag = 'TRUE'
WHERE T2.Flag=TRUE
AND T2.User IS NULL
在第一个查询中尝试T1.User=NULL。为什么在第二个查询中使用distinct?在SQL世界中经常讨论的是,对于不匹配的记录查询,它们是可互换的。