如何选择条件复杂的数据?
Posted
技术标签:
【中文标题】如何选择条件复杂的数据?【英文标题】:How to select data with a complex condition? 【发布时间】:2017-12-23 19:50:41 【问题描述】:使用Microsoft Access,我通常使用条件(主要是where
)来获取我想要显示的数据。
到目前为止,一切顺利。但是现在我有一个复杂的过滤,我不确定最好的方法。我会用很多查询来解释我是如何做到的,我想知道是否有更简单的东西,因为我觉得它对我完成的工作做得太多了。
我有 Building
和 Energy
表。在它们之间,我有一个链接表,因为 Building
有一个可能的能量列表。
我的目标是显示尚未与建筑物相关的所有能量。
我首先有一个简单的查询来显示链接表中关注建筑的所有能源 ID。
一旦我这样做了,我有另一个使用这个的查询,如果它是以前列表中缺少的能量,它会显示一个能量。
这需要 2 个查询,我觉得我可以有更好的方法来做到这一点。我是 MS Access 的新手,欢迎提出任何建议。
这是获取能量列表的第一个请求:
SELECT
Batiments.ID, Energies.ID, Energies.Type
FROM
Energies
INNER JOIN
(Batiments
INNER JOIN
Batiment_Energie ON Batiments.ID = Batiment_Energie.Batiment_ID) ON Energies.ID = Batiment_Energie.Energie_ID
WHERE
(((Batiments.ID) = " & cbxBatiments.Column(0) & "));"
【问题讨论】:
请显示查询。如果不了解您迄今为止所做的工作,很难告诉您哪些方面可以做得更好。 添加了第一个请求,稍后将添加第二个,我意识到我犯了第二个错误 尝试一个 not in 语句...select * from table1 where column not in (select column from table2) John Kane 谢谢,如果你的意思不是……它会给我所有的能量,因为在链接表中至少有一个条目用于另一座建筑物的能量 【参考方案1】:您可以使用
查询非关联能量类型SELECT
ID, Type
FROM
Energies
WHERE
ID NOT IN (SELECT Energie_ID
FROM Batiment_Energie
WHERE Batiment_ID = 123)
其中123
将替换为来自cbxBatiments.Column(0)
的Id。
【讨论】:
【参考方案2】:你可以使用not exists
:
select e.*
from energie as e
where not exists (select 1
from Batiment_Energie as be
where be.energie_id = e.id and be.batiment_id = <your id>
);
【讨论】:
到目前为止它什么也没返回 这意味着所有能量都用于该选择 ID。请发布数据,以便我们为您演示解决方案。以上是关于如何选择条件复杂的数据?的主要内容,如果未能解决你的问题,请参考以下文章