筛选计数子句-一对多关系

时间:2019-08-31 08:44:45

标签: sql sql-server

我目前有两个表,其中versionLog可以包含许多ProductVersions。

以下Sql查询:

    private List<Bind> _Registers = new List<Bind>();
private ModbusClient modbusClient;
private void Form1_Load(object sender, EventArgs e)
{
    modbusClient = new ModbusClient("10.54.11.252", 502);
    modbusClient.Connect();
    int[] ReadValues = modbusClient.ReadHoldingRegisters(0, 1);
    for(var i = 0; i < ReadValues.length; i++)
    {
      Registers.Add(new Bind()
        {
            Value = ReadValues[i];
        });
    }
    txt40001.DataBindings.Add(new Binding("Text", Registers[0],
     "Value", true, DataSourceUpdateMode.OnPropertyChanged));
}
public List<Bind> Registers
{
    get
    {
        return _Registers;
    }

    set
    {
        _Registers = value;
    }
}

产生类似于

的结果集
SELECT
versionlog.[Name],
(
    SELECT COUNT(*) 
    FROM dbo.ProductVersions productVersion 
    WHERE productVersion.VersionLogId = versionLog.Id  
) AS ProductVersions
FROM dbo.Versionlog versionLog

等等。

如何限制结果集仅返回ProductVersion Count = 0的Versionlog?

根据google,我需要使用Name | ProductVersions Log1 &nbsp;|&nbsp;12 Log2 &nbsp;|&nbsp;&nbsp;6 Log3 &nbsp;|&nbsp;&nbsp;0 子句吗?

2 个答案:

答案 0 :(得分:1)

使用HAVING

SELECT versionlog.[Name]
FROM dbo.Versionlog versionLog
LEFT JOIN dbo.ProductVersions productVersion 
  ON productVersion.VersionLogId = versionLog.Id  
GROUP BY versionlog.[Name]
HAVING COUNT(productVersion.VersionLogId) = 0;

且未分组:

SELECT versionlog.[Name]
FROM dbo.Versionlog versionLog
LEFT JOIN dbo.ProductVersions productVersion 
  ON productVersion.VersionLogId = versionLog.Id  
WHERE productVersion.VersionLogId IS NULL

答案 1 :(得分:0)

另一种子查询

select * from 
(
SELECT
versionlog.[Name],
(
    SELECT COUNT(*) 
    FROM dbo.ProductVersions productVersion 
    WHERE productVersion.VersionLogId = versionLog.Id  
) AS ProductVersions
FROM dbo.Versionlog versionLog
) a where a.ProductVersions=0