如果mySQL中的选定值为“0”,请从另一列中选择

如果mySQL中的选定值为“0”,请从另一列中选择,mysql,sql,Mysql,Sql,我有一张与下表相似的表 id | mainID | subID 1 | 11 | 0 2 | 12 | 0 3 | 13 | 20 4 | 13 | 21 5 | 15 | 0 如果子ID为0,我需要选择所有mainID。如果subID不是0,则选择subID而不是mainIdD 结果表 id | resultId 1 | 11 2 | 12 3 | 20 4 | 21 5 | 15 subID列的值

我有一张与下表相似的表

id | mainID | subID
1  |   11    |   0
2  |   12    |   0 
3  |   13    |   20
4  |   13    |   21
5  |   15    |   0
如果子ID为0,我需要选择所有mainID。如果subID不是0,则选择subID而不是mainIdD

结果表

id | resultId
1  | 11
2  | 12
3  | 20
4  | 21
5  | 15
subID列的值不是null,所以我不能在这里使用ifnull。这可以通过使用sql查询来实现吗?并且在php中不使用write函数。我知道可以用php完成,但我需要sql查询本身的数据。

您可以使用case表达式:

select id, (case when subid = 0 then mainid else subid end) as resultid
from t;
对于您的示例数据,最大值也适用于:

select id, greatest(subid, mainid) as resultid
或者,如果将0值存储为NULL而不是0,则最好是合并:

select coalesce(subid, mainid) as resultid
如果0表示没有匹配的值,则NULL很有意义。

您可以使用大小写表达式:

select id, (case when subid = 0 then mainid else subid end) as resultid
from t;
对于您的示例数据,最大值也适用于:

select id, greatest(subid, mainid) as resultid
或者,如果将0值存储为NULL而不是0,则最好是合并:

select coalesce(subid, mainid) as resultid

如果0表示没有匹配的值,那么NULL很有意义。

你能解释coalesce的作用吗?@KuronekoPirate。它返回第一个非空值。正如我在回答中所说,如果使用NULL而不是0,这将是一个典型的解决方案。此外,我需要在这里连接另一个类似的表。我可以使用相同的列来存储这两个表的数据吗?@KuronekoPirate。这将是一个非常不同的问题,新问题不应作为评论提出。可以在JOIN子句中使用该表达式。或子查询,以便您可以直接使用列别名。@KuronekoPirate如果您需要加入另一个表,请提出另一个问题并接受此答案。您能解释一下coalesce的作用吗?@KuronekoPirate。它返回第一个非空值。正如我在回答中所说,如果使用NULL而不是0,这将是一个典型的解决方案。此外,我需要在这里连接另一个类似的表。我可以使用相同的列来存储这两个表的数据吗?@KuronekoPirate。这将是一个非常不同的问题,新问题不应作为评论提出。可以在JOIN子句中使用该表达式。或子查询,以便您可以直接使用列别名。@KuronekoPirate如果您需要加入另一个表,请提出另一个问题并接受此答案。