-1

在我的查询中,我有以下条件

left Join Table2 on Table2.Id = Table1.Id and Table2.status in  ('Close', 'Open')

由于左连接,上述条件给了我 2 额外的行。我注意到,如果条件中只有 Close 或 Open ,它会返回正确的行数。

为了解决这个问题,我试图写这样的东西

And  Table2.status = (Case Table2.status
                WHEN 'Open' Then 'Open'
                When 'Close' Then 'Close'   
                 End ) 

但这仍然返回 2 个额外的行。对于如何解决这个问题,有任何的建议吗??

4

2 回答 2

1

你可以这样做:

select *
from table1
    left join 
    (
         select id from table2 
         where status in ('open', 'close')
         group by id

    ) as table2
        on table1.id = table2.id

这看起来很老套,但我目前似乎无法想出更好的东西。否则,您可以使用DISTINCT

select DISTINCT table1.*, table2.stuff
FROM Table1
    LEFT JOIN Table2
        on Table2.Id = Table1.Id and Table2.status in  ('Close', 'Open')
于 2012-07-09T17:08:38.137 回答
0

关键是DISTINCT陈述。

SELECT DISTINCT Table1.* FROM Table1 
     LEFT JOIN Table2 ON Table2.Id = Table1.Id 
                      AND Table2.status in  ('Close', 'Open')
于 2012-07-09T17:12:28.133 回答