gpt4 book ai didi

sql-server-2008 - 如何验证子查询是否正确?

转载 作者:行者123 更新时间:2023-12-03 08:09:15 25 4
gpt4 key购买 nike

我有两个表:

带列SupplierLocation

  • Id | SupplierId | ThirdPartyId
  • 带列 Supplier
  • Id | Company

  • 我们正在使用SQL Server2008。我正在尝试更正一些写得不好的查询。例如,即使子查询中的列名不正确(供应商表没有ThirdPartyId),以下查询也会运行而不会引发错误:
    SELECT * 
    FROM SupplierLocation
    WHERE SupplierId IN (SELECT ThirdPartyId
    FROM Supplier
    WHERE Id = @id)

    有没有办法检查像这样的查询中子查询是否正确?

    谢谢!

    最佳答案

    使用别名并限定列名。

    SELECT * 
    FROM SupplierLocation as SL
    WHERE SL.SupplierId IN (SELECT S.ThirdPartyId
    FROM Supplier as S
    WHERE S.Id = @id)

    在子查询中包含来自各种来源的数据是完全合法的:
    SELECT *, ( select Id + ThirdParty + @Id from Supplier where Id = @Id ) as GuessWhat
    FROM SupplierLocation as SL
    WHERE SL.SupplierId IN (SELECT S.ThirdPartyId
    FROM Supplier as S
    WHERE S.Id = @id)

    如果您不清楚源代码,那么您可能会惊讶地发现SQL Server可以解决的问题。每当您使用JOIN限定所有列名时,这都是一个好习惯。

    SSMS中的“分析”工具将检测到一些但不是全部错误。这是一个方便的起点。

    关于sql-server-2008 - 如何验证子查询是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115520/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com