2011-12-01 23 views
0

我有一个表ABR有三列:两个查找值,AB和结果Result。我想要结果返回给定AB在通配符中选择MySQL中最具体的行

但是,对于某些值为A,列B可以是通配符。在那种情况下,我想要最特定的行。

我似乎无法找出MySQL的声明虽然 - 我发现一个,但它是7号线长,有5 =和两个IF的,必须有一个更好的办法。

A B Result 
1 * First 
2 * Second 
2 1 Third 
2 2 Fourth 
3 * Fifth 

Example wanted results: 
A=1, B=5 -> First 
A=1, B=0 -> First 
A=2, B=2 -> Fourth 
A=2, B=4 -> Second 
A=3, B=7 -> Fifth 

请注意,列值可以稍后更改:我们可以为A和B添加额外的行,或删除值。 SQL中的硬编码是不可接受的。

回答

0
SELECT Result 
    FROM ABR 
    WHERE A = @LookupA 
     AND (B = @LookupB OR B = '*') 
    ORDER BY B DESC LIMIT 1; 
+0

是的,这将工作。但是我加入了另一系列连接的这张表,并且ORDER-BY-LIMIT-1将会抛弃我已经拥有的GROUP-BY。或者,也许我应该把这个在子查询中,然后加入子查询结果? – Konerak

+0

@Konerak:听起来像子查询会起作用。你必须尝试看看。 –