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

时间:2017-12-23 19:50:42

标签: sql ms-access

使用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) & "));"

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您可以使用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>
                 );