如何选择条件复杂的数据?

Posted

技术标签:

【中文标题】如何选择条件复杂的数据?【英文标题】:How to select data with a complex condition? 【发布时间】:2017-12-23 19:50:41 【问题描述】:

使用Microsoft Access,我通常使用条件(主要是where)来获取我想要显示的数据。

到目前为止,一切顺利。但是现在我有一个复杂的过滤,我不确定最好的方法。我会用很多查询来解释我是如何做到的,我想知道是否有更简单的东西,因为我觉得它对我完成的工作做得太多了。

我有 BuildingEnergy 表。在它们之间,我有一个链接表,因为 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。请发布数据,以便我们为您演示解决方案。

以上是关于如何选择条件复杂的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在通过双击选择的数据表条目的条件下构建条件面板?

如何从具有多个条件的firebase数据库中选择数据[重复]

如何根据条件选择R数据框中的连续行?

如何定义一个函数来根据多个条件汇总和选择数据?

模型特征选择:用简单模型为复杂模型筛选特征

在实际开发中,如何权衡选择使用哪种数据结构和算法?