2016-03-24 71 views
1

我有查询:如果在一个查询中第一个为空,如何获得SELECT的第二个结果?

SELECT 
     cl.id client_id, 
     c.provider_id provider_id, 
     c.mcc mcc, 
     c.mnc mnc, 
     c.cost cost, 
     c.active active_cost 
     FROM costs c 
     INNER JOIN clients cl 
     ON cl.pref_provider_id = c.provider_id 
     WHERE c.mcc = 405 AND c.mnc = 11 AND c.active = 1 AND cl.id = 2 

,如果这个纪录将不会被适当的条件可以发现,之后我需要写第二选择,并尝试通过该条件(WHERE c.mcc = 405和C获取记录。 mnc = 0 AND c.active = 1 AND cl.id = 2)在一个查询中,当然是

可以帮我吗?尽可能少的查询它是理想的:)

http://sqlfiddle.com/

+1

仍在挣扎?如果您愿意,可以考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry

+0

@Strawberry,thx,我试图创建我的bd http://sqlfiddle.com/#!9/ 57ea8/1 – AxOn

回答

1

您可以使用NOT EXISTS(),以检查是否存在与MNC = 11

SELECT 
     cl.id client_id, 
     c.provider_id provider_id, 
     c.mcc mcc, 
     c.mnc mnc, 
     c.cost cost, 
     c.active active_cost 
     FROM costs c 
     INNER JOIN clients cl 
     ON cl.pref_provider_id = c.provider_id 
     WHERE c.mcc = 405 AND c.active = 1 AND cl.id = 2 
     AND (c.mnc = 11 or 
      c = 0 and NOT EXISTS(select 1 from costs cc 
            where cc.mcc = 405 AND cc.active = 1 AND 
            and cc.mnc = 11 and cl.pref_provider_id = cc.provider_id)) 
+0

“'where子句'中的未知列'c'” – AxOn

+0

s1.c.mnc = 0和NOT EXISTS(....)AS s1?也不能这样工作 – AxOn

+0

@AxOn立即尝试.. – sagi

0
SELECT 
cl.id client_id, 
c.provider_id provider_id, 
c.mcc mcc, 
c.mnc mnc, 
c.cost cost, 
c.active active_cost 
FROM (select * from costs LIMIT 100 OFFSET 1) c 
INNER JOIN clients cl 
ON cl.pref_provider_id = c.provider_id 
WHERE c.mcc = 405 AND c.mnc = 11 AND c.active = 1 AND cl.id = 2; 
0

记录试试这个:

SELECT cl.id client_id, 
     case when c1.provider_id is not null then c1.provider_id else c2.provider_id end provider_id, 
     case when c1.mcc is not null then c1.mcc else c2.mcc end mcc, 
     case when c1.mnc is not null then c1.mnc else c2.mnc end mnc, 
     case when c1.cost is not null then c1.cost else c2.cost end cost, 
     case when c1.active is not null then c1.active else c2.active end active_cost 
FROM clients cl 
left outer join costs c1 ON cl.pref_provider_id = c1.provider_id and c1.mcc = 405 AND c1.mnc = 11 AND c1.active = 1 
left outer join costs c2 ON cl.pref_provider_id = c2.provider_id and c2.mcc = 405 AND c2.mnc = 0 AND c2.active = 1 
where AND cl.id = 2 
and (c1.provider_id is not null or c2.provider_id is not null) 
相关问题