Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql与条件不匹配的键_Sql_Select_Join_Ms Access 2013 - Fatal编程技术网

sql与条件不匹配的键

sql与条件不匹配的键,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 选择右侧的行,然后检查联接是否没有匹配项,但这

这几乎是一种左连接的情况,但我不知道如何用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上,这是非常慢的,好像第一行的每一行都在运行第二个select


到目前为止,唯一的解决方案是从第二个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世界中经常讨论的是,对于不匹配的记录查询,它们是可互换的。