1

我正在尝试进行一个查询,该查询选择完全填满的第一行,并且输入值在该行中的某个位置,否则它不会拉任何东西。这是我到目前为止所做的:

CASE WHEN `name_1` != '' and `name_2` != '' and `name_3` != ''  and `name_4` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end
CASE WHEN `name_1` != '' and `name_2` != '' and `name_4` != ''  and `name_3` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end
CASE WHEN `name_1` != '' and `name_4` != '' and `name_3` != ''  and `name_2` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end
CASE WHEN `name_4` != '' and `name_2` != '' and `name_3` != ''  and `name_1` = 'Jimmy' THEN (SELECT`name_1`,`name_2`,`name_3`,`name_4` FROM `names`) end

这将返回错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'CASE WHEN name_1!= '' and name_2!= '' and name_3!= '' and name_4= ''附近使用正确的语法

很明显它写错了,那么它到底有什么问题呢?我这样做是否正确?

4

2 回答 2

2

这不是正确的使用方式CASE。我猜你想选择JIMMY可能出现在一个或多个列上的行,并且任何列都不能为空,

SELECT  `name_1`,`name_2`,`name_3`,`name_4` 
FROM    `names`
WHERE   `name_1` IS NOT NULL AND 
        `name_2` IS NOT NULL AND 
        `name_3` IS NOT NULL AND 
        `name_4` IS NOT NULL AND
        (
            `name_1` = 'JIMMY' OR 
            `name_2` = 'JIMMY' OR 
            `name_3` = 'JIMMY' OR 
            `name_4` = 'JIMMY' 
        )

我认为这个解决方案比使用CASE.

于 2012-10-06T16:11:02.263 回答
1

您的语句必须以某种 DML 词 ( SELECT, UPDATE, CALL, DO...) 开头。话虽这么说,您的表没有标准化,因为您不应该有四列名称,而是可能有 2 列(名称,名称值)。

使用的正确语法CASE如下所示:

SELECT
    CASE
        WHEN name_1 <> '' AND name_2 <> '' AND name_3 <> '' AND name_4 = 'Jimmy'
            THEN some_column
        WHEN ...
            THEN ...
    END AS column
FROM names

通过阅读您的帖子,您似乎正在尝试到达第一个非空字段。你可以尝试这样的事情:

SELECT name_1, name_2, name_3, name_4
FROM names
WHERE (name_1 <> '' AND name_2 <> '' AND name_3 <> '' AND name_4 = 'Jimmy') OR
    (name_1 <> '' AND name_2 <> '' AND name_4 <> '' AND name_3 = 'Jimmy') OR
    ...
于 2012-10-06T16:05:51.827 回答