Sql server 子查询结果的问题以及如何在

Sql server 子查询结果的问题以及如何在,sql-server,Sql Server,我的问题是在SQLServer2008中使用子查询筛选行 例如 create table A (article varchar(200), colour varchar(200), size varchar(200), prize money) create table B (article varchar(200), colour varchar(20

我的问题是在SQLServer2008中使用子查询筛选行

例如

create table A (article varchar(200),
                colour  varchar(200),
                size    varchar(200),
                prize   money)

create table B (article varchar(200),
                colour  varchar(200),
                size    varchar(200),
                prize   money)

content A

 - 00100221 BLANCO  39  30,00 
   00100221 BLANCO  40  30,00
   00100221 BLANCO  41  30,00 
   00100221 BLANCO  42  30,00
   00100221 BLANCO  43  30,00 
   00100221 BLANCO  44  30,00
   00100221 BLANCO  45  30,00 
   00100221 BLANCO  46  30,00
   00100221 GRIS    42  30,00 
   00100221 GRIS    43  30,00

content B

 - 00100221 BLANCO  39  3,00 
   00100221 BLANCO  40  30,00
   00100221 BLANCO  41  30,00 
   00100221 BLANCO  42  30,00
   00100221 BLANCO  43  30,00 
   00100221 BLANCO  44  30,00
   00100221 BLANCO  45  30,00 
   00100221 BLANCO  46  30,00
   00100221 GRIS    42  30,00 
   00100221 GRIS    43  30,00

select  A.* 
  from A  

 where A.article in 
                     ( 
                       select Article 
                         from B 
                        where B.Article = A.Article
                          and B.Colour = A.Colour
                          and B.size = A.size
                          and B.prize <> A.prize   
                     ) 
此查询的结果是:

00100221布兰科39 30,00

但我期待所有的争吵

子查询的结果是一篇文章。但是主查询只显示子查询中匹配所有条件的位置

尝试改用JOIN:


您要求表B中相同的鞋子数据,但价格不同,这只是第一个!也许你正在寻找这样的东西:

select A.*,
       case
        when B.Price <> A.Price then 'X'
        else ''
       end as HasDifferentPriceInTableB
  from A  
  join B on B.Article = A.Article and
            B.Colour  = A.Colour  and
            B.Size    = A.Size

在我读到的内容中,您需要表A的所有行,即使表b中的记录不符合条件A.prize b.prize如下:

select  A.*, B.prize from A  
left outer join B on
B.article = A.article and
B.prize <> A.prize
这就是我对查询的理解。

解决方案是

    select  A.* 
  from A  

 where A.article in 
                     ( 
                       select Article 
                         from B 
                         left join A X
                           on B.Article = X.Article
                          and B.Colour = X.Colour
                          and B.size = X.size
                          and B.prize <> X.prize   
                     ) 

你能显示两个表中的一些示例数据和你想要的结果吗?我想要的值是A中的所有行。所有与子查询中的条件匹配的行。因此,在子查询和B中,你只能得到1行。prize A.prize你的解决方案返回相同的00100221 BLANCO 39 30,00I询问所有颜色和尺寸的鞋子从表A看,其文章在表B中有不同的奖项。对-只有第一个有不同的价格3,而不是表B中的30!在表A和表B中,所有其他鞋子的价格都相同,因此它们不会被退回。我要求A的所有行,其文章在表B中有不同的奖项。但我只得到一个,我认为他们应该让我退回所有符合主要条件的行。A.子查询中的文章。我的问题是子查询正在筛选我的结果。在interbase中,这不会发生!您要求A中的所有行在B中具有不同的价格。请尝试我的查询,也许这就是您要查找的类型。连接是相同的。谢谢,请使用新示例进行测试。它更简单。不,我认为这不是有很多物品、颜色和尺寸的解决方案。
    select  A.* 
  from A  

 where A.article in 
                     ( 
                       select Article 
                         from B 
                         left join A X
                           on B.Article = X.Article
                          and B.Colour = X.Colour
                          and B.size = X.size
                          and B.prize <> X.prize   
                     )