简体   繁体   English

在SQL中结果为空的情况下如何返回列值?

[英]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的查询,即使field2field3为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM