我的问题是在sql server 2008中使用子查询过滤行。
实施例,
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 BLANCO 39 30,00
但我希望所有的行。
子查询的结果是一篇文章。但是主查询只显示匹配子查询中所有条件的位置。
答案 0 :(得分:0)
请尝试使用JOIN
:
select v.*
from vu_oc_u_web_can v
join oc_u_web u ON u.Articulo = v.Articulo
and u.Color = v.colorpro
and u.Talla = v.talla
WHERE u.PVPRebaja <> v.preciorebtar
答案 1 :(得分:0)
您要求表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
答案 2 :(得分:0)
在我读到的内容中,你想要表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
这就是我对查询所需内容的理解。
答案 3 :(得分:0)
解决方案是
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
)