【问题标题】:How to check for details of subquery output?如何检查子查询输出的详细信息?
【发布时间】:2011-02-18 08:09:25
【问题描述】:

我有一个这样的查询:

UPDATE t3
SET    somevalue  = (SELECT t2.id
                  FROM   table1 t1
                         JOIN table2 t2
                           ON t1.fk_table2_id = t2.id
                  WHERE  t3.id = t1.fk_table3_id)
FROM   table3 t3 

子查询 SELECT t2.id FROM table1 t1 JOIN table2 t2 ... 在我的 SQL Server 20008 数据库中的某个位置返回 2+ 个值。有没有一种简单的方法可以找出失败的地方?还是有另一种方法可以用另一个表中的值更新一个表中的列?

提前致谢

【问题讨论】:

  • 您可以尝试在子查询中使用 TOP 1。显然,至少根据您的想法,似乎存在一些不一致的数据。因此,如果您乐于忽略这一点,那么前 1 项应该可以解决您的直接问题
  • 是的,我已经在子查询上尝试了top 1,问题是,我不确定结果是否正确,所以我想看看它在哪里检查失败...

标签: sql sql-server-2008 subquery


【解决方案1】:

假设 ts.id 是唯一的,您可以找出它返回多于 1 行的位置,使用 SELECT(如果 t1.fk_table3_id 确实是外键约束,则从查询中省略 table3):

SELECT t3.id, COUNT(*)
FROM  table1 t1 JOIN table2 t2 ON t1.fk_table2_id = t2.id
  JOIN table3 t3 ON t3.id = t1.fk_table3_id
GROUP BY t3.id
HAVING COUNT(*) > 1

【讨论】:

  • 谢谢,这帮助我弄清楚了……在我的情况下使用前 1 是可以的,谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-06-15
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多