获取表的特定列名称

时间:2013-05-21 07:22:50

标签: c# asp.net mysql

我正在处理一个项目,我遇到了一个查询,我想获取一个值为“no”的表的特定列名。

我有一个名字订阅的表,它有四个字段; ID(integer),电子邮件(varchar),短信(varchar),电话(varchar)和我的电子邮件,短信和电话字段的值为“是”或'否'。

现在我想只检索那些值'no'的列的名称。 我想在mysql中执行这个查询。

我已经尝试了以下查询,即使出现'no'的任何地方,也会返回完整的行:

SELECT * FROM test.subscription WHERE 'no' IN (email,sms,phone);

Like i have these two roes now i want to select the column name where value='no' and id=1

就像我现在有这两行一样,我想选择列名,其中value ='no'和id = 1

3 个答案:

答案 0 :(得分:2)

使用像:

这样的案例陈述如何廉价和愉快
SELECT ID, 'ColName' = CASE
    WHEN email = 'no' THEN 'email'
    END, 
    'ColName2' = CASE
    WHEN sms = 'no' THEN 'sms'
    END, 
    'ColName3' = CASE
    WHEN phone = 'no' THEN 'phone'
    END
FROM subscription
where ID = 2

答案 1 :(得分:0)

由于权限较少,我无法将其作为注释,但如果您要搜索表所持有的值(可能是任何列),您可以查看SO post

使用同一篇文章中的代码 -

DECLARE @Results TABLE(ColumnName nvarchar(370), ColumnValue nvarchar(3630))

DECLARE @SearchStr nvarchar(100)

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = 'no'
SET @SearchStr2 = QUOTENAME('%' + 'no' + '%','''')

    SET @ColumnName = ''
    SET @TableName = '[test].[dbo].[subscription]'

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM    INFORMATION_SCHEMA.COLUMNS
            WHERE       TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND TABLE_NAME  = PARSENAME(@TableName, 1)
                AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
                AND QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL
        BEGIN
            INSERT INTO @Results
            EXEC
            (
                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END 


SELECT ColumnName, ColumnValue FROM @Results

答案 2 :(得分:0)

如果我的问题正确,我认为以下 Query 可能会有效

SELECT * 
FROM test.subscription 
WHERE 1=1
and 
(email = 'no'
or
email = 'no'
or 
sms = 'no'
)
and id=(your values)