使用MySQL SELECT时,您可以根据其他字段更改返回字段的值吗?
例如,如果我有这个选择:
SELECT city,state,country FROM table
现在如果city为空且状态为空,我希望country的值也为空(无论country是否实际有值)。
示例表:
id | city | state | country
-----------------------------
1 | Here | There | MyCountry
2 | | | YourCountry
所以使用上面的表格,我希望id = 1的结果返回Here,There,MyCountry但是id = 2的结果应该是空的,空的,空的
由于
编辑:为了澄清,WHERE子句不起作用,因为即使city和state为空,我也需要返回该行。一个更好的例子可能是SELECT id,city,state,country FROM my_table
答案 0 :(得分:8)
更新(更正印刷错误):
SELECT city,state,
CASE
WHEN (city IS NULL OR city='') AND (state IS NULL or state='') THEN ''
ELSE country
END as country_1
FROM `table`
您也可以使用IF
代替CASE
:
IF ((city IS NULL OR city='') AND (state IS NULL or state=''),'',country) as country_1
答案 1 :(得分:1)
答案是肯定的;你正在寻找所谓的控制流功能。
查看http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
答案 2 :(得分:1)
a1ex07是对的,但您需要在他的SELECT stmt中修复一些查询错误。
首先,在“state”之后有一个缺少的逗号,第二,如果你的表真的被称为“table”,你必须用反引号括起来,因为它是一个保留的MySQL关键字。
SELECT city,state,
CASE
WHEN (city IS NULL OR city='') AND (state IS NULL or state='') THEN ''
ELSE country
END as country_1
FROM `table``
(排除第二个反引号,如果单个,则stackoverflow使用那些语法突出显示。)
答案 3 :(得分:0)
为什么不直接使用WHERE子句?
例如:
SELECT city, state, country FROM <table> WHERE (city <> "" OR state <> "");
N.B。:您需要更换'&lt;&gt; “”上面带有'IS NOT NULL',如果它们实际上是空的而不是空的。