Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-从表中选择两列匹配的行。如果不存在,请选择包含一列的行_Mysql_Sql - Fatal编程技术网

MySQL-从表中选择两列匹配的行。如果不存在,请选择包含一列的行

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

表:

我正在尝试使用两种组合创建优先选择: 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                 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字段中??