2011-02-18 137 views
1

我有这样的查询:如何检查子查询输出的详细信息?

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表1 T1 JOIN表2 T2 ...返回2+值在我的SQL Server数据库20008某个地方。有没有简单的方法来找出它失败的地方?还是有另一种方法来更新一个表中的列与另一个表中的值?

在此先感谢

+1

你可以尝试在你的子查询中使用TOP 1。显然它看起来像有一些不一致的数据,至少按照你的想法。所以如果你很乐意忽略这个问题,那么top 1应该解决你的问题 – 2011-02-18 08:15:45

+0

是的,我已经尝试了子查询中的top 1,问题是,我不确定结果是否正确,所以我想看看它失败的位置检查... – grady 2011-02-18 08:16:31

回答

1

假设ts.id是独一无二的,你可以找出其返回多于1行,使用SELECT(从查询忽略table3如果t1.fk_table3_id真的是一个外键约束):

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 
相关问题