首页 > 解决方案 > 带有子查询的 SQL 查询

问题描述

我尝试获取其他表中使用的记录数,但 SQL 返回 null

这是我的代码:

DBConnectionClass.Command.CommandText = 
    "SELECT COUNT(IMO) 
    FROM vessel 
    WHERE ('" + IMO + "' = 
    (SELECT IMO FROM ActOfExemption)) 
    OR ('" + IMO + "' = (SELECT IMO FROM Waybill))";
            
object SQL = DBConnectionClass.Command.ExecuteScalar();
byte Result = Convert.ToByte(SQL);

相同的查询但有效且没有子查询:

DBConnectionClass.Command.CommandText = 
    "SELECT COUNT(IMO) 
    FROM ActOfExemption 
    WHERE IMO = '" + IMO + "'";

object SQL = DBConnectionClass.Command.ExecuteScalar();
byte Result = Convert.ToByte(SQL);

DBConnectionClass.Command.CommandText = 
    "SELECT COUNT(IMO) 
    FROM Waybill 
    WHERE IMO = '" + IMO + "'";
       
SQL = DBConnectionClass.Command.ExecuteScalar();
Result += Convert.ToByte(SQL);

如何在一个带有子查询的查询中做到这一点?

标签: c#mysqlsql

解决方案


你的问题似乎是关于 SQL 的,所以我将忽略 C# 代码的明显问题......

假设 C# 变量 IMO 的值为“abc”,SQL 将如下所示:

SELECT 
(
  SELECT COUNT(v.IMO)
  FROM vessel v
    INNER JOIN ActOfExemption a on a.IMO = v.IMO
  WHERE v.IMO = 'abc'
) +  
(
  SELECT COUNT(v.IMO)
  FROM vessel v
    INNER JOIN Waybill W on W.IMO = v.IMO
  WHERE v.IMO = 'abc'
)

但这可能导致两次计算同一船只记录。


推荐阅读