[英]How to return a column value in case result is empty in SQL?
I am using a SQL query to fetch 3 column values. 我正在使用SQL查询来获取3列值。 Sometimes I don't get records. 有时我没有记录。 What I need is a query that always returns field1
, even if field2
and field3
are NULL. 我需要的是一个始终返回field1
的查询,即使field2
和field3
为NULL。
I'm using field1
as input: 我使用field1
作为输入:
AND field1 IN('test1', 'test2', 'test3')
How can I always return these values? 如何始终返回这些值?
Complete SQL query: 完整的SQL查询:
SELECT field1, field2, field3
FROM
(
SELECT
name1.field1,
name1.field2,
name3.field3,
name4.field4,
@pl2 := IF( @pl1 = name1.field1, @pl2, 1) as pl2,
@pl1 := name1.field1
FROM
(
SELECT
@pl1 := NULL,
@pl2 := 0
)
R,
db1.field5 AS name1,
db1.field6 AS name2,
db1.field7 AS name3,
db1.field8 AS name4
WHERE
name2.field9 = name1.field9
AND name3.field10 = name2.field10
AND name4.field11 = name3.field3
AND field1 IN('test1', 'test2', 'test3')
AND field12 LIKE 'helloworld'
AND name2.field13 LIKE 'helloworld'
GROUP BY name1.field1
ORDER BY name1.field14 desc
)
A
WHERE
pl2 = 1
Current output (wrong): 电流输出(错误):
AND field1 IN('test1', 'test2', 'test3')
field1 | field2 | field3
test3 | hello | world
AND field1 IN('test1', 'test2')
field1 | field2 | field3
Needed output: 所需的输出:
AND field1 IN('test1', 'test2', 'test3')
field1 | field2 | field3
test1 | [this part doesn't matter]
test2 | [this part doesn't matter]
test3 | hello | world
AND field1 IN('test1', 'test2')
field1 | field2 | field3
test1 | [this part doesn't matter]
test2 | [this part doesn't matter]
如果您说SELECT COALESCE(field1, field2, field3)
代替该怎么办
As a said in comment, I couldn't test as there are not (partial) script to CREATE TABLE and sample data insert. 正如评论中所说,由于没有(部分)脚本来创建表和插入示例数据,因此我无法进行测试。 I thought something like that: can you see if it works for you? 我想过这样的事情:您能看到它是否对您有用吗?
SELECT NAME1.FIELD1
, NAME1.FIELD2
, NAME3.FIELD3
, NAME4.FIELD4
, @pl2 := IF( @pl1 = NAME1.FIELD1, @pl2, 1) AS pl2
, @pl1 := NAME1.FIELD1
FROM FIELD5 AS NAME1
CROSS JOIN (SELECT @pl1 := NULL, @pl2 := 0) R
INNER JOIN DB1.FIELD6 AS NAME2 ON NAME1.FIELD9 = NAME2.FIELD9
LEFT JOIN DB1.FIELD7 AS NAME3 ON NAME3.FIELD10 = NAME2.FIELD10
LEFT JOIN DB1.FIELD8 AS NAME4 ON NAME4.FIELD11 = NAME3.FIELD3
WHERE FIELD1 IN ('test1', 'test2', 'test3')
AND name2.field13 LIKE 'helloworld'
GROUP BY NAME1.FIELD1
ORDER BY NAME1.FIELD14 DESC
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.