MySQL-从表中选择两列匹配的行。如果不存在,请选择包含一列的行
表: 我正在尝试使用两种组合创建优先选择: 1.国家id=200,州id=100。 2.如果给定的组合不存在,则获取country\u id=200和state\u id=-1 注意:该表不一定同时包含这两行,它们可能独立存在 试图使用MySQL-从表中选择两列匹配的行。如果不存在,请选择包含一列的行,mysql,sql,Mysql,Sql,表: 我正在尝试使用两种组合创建优先选择: 1.国家id=200,州id=100。 2.如果给定的组合不存在,则获取country\u id=200和state\u id=-1 注意:该表不一定同时包含这两行,它们可能独立存在 试图使用 country_id state_id rate 200 100 1.1 200 -1
country_id state_id rate
200 100 1.1
200 -1 5.1
我尝试过的另一个选项是使用UNION作为子查询
SELECT CASE a.rate > 0 THEN a.rate ELSE b.rate AS rate
FROM
(
(SELECT * FROM taxes WHERE country_id = 200 and state_id = 100) AS a,
(SELECT * FROM taxes WHERE country_id = 200 and state_id = -1) AS b
)
只有当表中有两行时,这两行都可以正常工作,如果其中一行丢失,则会失败。。。有什么想法吗?问题不是很清楚,但你可以这样做
SELECT CASE b.a_rate > 0 THEN b.a_rate ELSE b.b_rate AS rate
FROM
(
(
SELECT rate AS a_rate FROM taxes WHERE country_id = 200 and state_id = 100
UNION
SELECT rate AS b_rate FROM taxes WHERE country_id = 200 and state_id = -1
) AS b
)
如果第一个子查询返回NULL,则使用第二个子查询
请看:这个问题不是很清楚,但你可以这样做
SELECT CASE b.a_rate > 0 THEN b.a_rate ELSE b.b_rate AS rate
FROM
(
(
SELECT rate AS a_rate FROM taxes WHERE country_id = 200 and state_id = 100
UNION
SELECT rate AS b_rate FROM taxes WHERE country_id = 200 and state_id = -1
) AS b
)
如果第一个子查询返回NULL,则使用第二个子查询
请参阅:如果状态-1的ID始终低于任何其他状态的ID,我会选择将-1条件添加到WHERE语句中的解决方案,按state_ID字段排序,并将结果限制为第一个可用的:
select
ifnull(
(select rate
from taxes t1
where t1.country_id=200
and t1.state_id = 100)
,(select rate
from taxes t2
where t2.country_id=200
and t2.state_id = -1)
) as `rate`
如果状态-1的ID总是低于任何其他状态的ID,我会选择将-1条件添加到WHERE语句中的解决方案,按state_ID字段排序,并限制结果以获得第一个可用的结果:
select
ifnull(
(select rate
from taxes t1
where t1.country_id=200
and t1.state_id = 100)
,(select rate
from taxes t2
where t2.country_id=200
and t2.state_id = -1)
) as `rate`
选择“国家/地区id=200按州排序的税率”\u id DESC?如果表中不存在该州,是否返回值?e、 g.如果请求的州为200,而该州不在您希望返回的默认税率ORDER by字段的行中??从country\u id=200 ORDER by state\u id DESC的税收中选择税率作为一个税率?如果表中不存在该州,您希望返回一个值吗?e、 g.如果请求的状态为200,而该状态不在您希望返回的默认速率Order by字段中??