我正在处理一个项目,我遇到了一个查询,我想获取一个值为“no”的表的特定列名。
我有一个名字订阅的表,它有四个字段; ID(integer
),电子邮件(varchar
),短信(varchar
),电话(varchar
)和我的电子邮件,短信和电话字段的值为“是”或'否'。
现在我想只检索那些值'no'的列的名称。 我想在mysql中执行这个查询。
我已经尝试了以下查询,即使出现'no'的任何地方,也会返回完整的行:
SELECT * FROM test.subscription WHERE 'no' IN (email,sms,phone);
就像我现在有这两行一样,我想选择列名,其中value ='no'和id = 1
答案 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)