当前位置: 首页 > 知识库问答 >
问题:

用CASE语句检查mysql查询中的存在性

贺聪
2023-03-14

我在mysql查询中使用CASE语句,我必须检查同一查询中是否存在列。

有可能这样做吗?如果是,请帮忙。

我的查询为例-

当“Status”时选择CASE column1,然后选择“Status”当“value”时(当id不为NULL时选择CASE id,然后选择“status1”,否则选择“status2”结束为table1 where condition中的ScheduleStatus)结束为table2中的Status LEFT JOIN table1 ON...where condition..;

在上面的查询中,当执行它时,我得到的结果“status2”(其他部分),即使他的条件满足。如果“id”行当时不存在,那么结果应该是“status1”。请纠正我。

共有1个答案

鲍俊杰
2023-03-14

见那一页的第三个答案--

if not exists (select
                 column_name
           from
                 INFORMATION_SCHEMA.columns
           where
                 table_name = 'MyTable'
                 and column_name = 'MyColumn')

它也应该可以在MySQL中工作。

或者你可以试试这个-

SELECT * 
FROM information_schema.COLUMNS 
WHERE 
    TABLE_SCHEMA = 'dbName' 
AND TABLE_NAME = 'tableName' 
AND COLUMN_NAME = 'columnName'

如果您想在CASE中对其进行chack,请使用一个获得varchar的函数--列名并返回''或NULL(如果列不存在)。将列名替换为函数-

CREATE FUNCTION Func_Check_Exists(columnName CHAR(20)) 
RETURNS CHAR(20)
DETERMINISTIC
BEGIN 

 RETURN ...;
END;

在你的代码里-

SELECT CASE Func_Check_Exists('column1') WHEN 'status' THEN ...
 类似资料:
  • 问题内容: 我上周一直在学习SQL,但是我不确定如何在检查约束中正确添加case语句。有人可以给我指点吗? 我有以下成绩表: 我想检查是否在AD之间,则必须为“ S1”,或者是否在EG之间,则为“ S2”。 我试图对此进行研究并提出后者,但是它不起作用..我是否正确构造了代码? 问题答案: 我认为您可以执行以下操作: 请在此处查看SQL Fiddle模式。 您不需要约束,因为正则表达式检查就足够了

  • 我得到了一个错误: SQL错误[500310][0A000]:Amazon无效操作:Redshift表不支持指定的类型或函数(每个信息消息一个);

  • 问题内容: 我只想获取一个表“ b”的值,如果表“ a”的值是“-”如果表“ b”的值是空的,那么即使它是“-”,也要获取表“ a”的值 Microsoft Access对以下查询说“ Missing operator”: 我认为该错误是在CASE表达式行上。 问题答案: MS Access不支持语句。用途: 我不确定Access是否支持别名,但是它可能支持 注意(尽管标签正确),问题的标题可能会

  • 问题内容: 我正在尝试在MySQL选择查询中使用一条语句。 我在第一个语句之后出现错误。 为什么这不起作用?在MySQL查询中执行IF语句的正确方法是什么? 问题答案: 您使用的IF / THEN / ELSE构造仅在存储过程和函数中有效。您的查询将需要重组,因为您不能使用IF()函数来控制WHERE子句的流程。 可以在查询中使用的IF()函数主要用于在查询的SELECT部分​​中根据某些条件选择

  • 在mySQL查询中,我希望根据WHERE子句中PDO绑定的搜索参数条件选择客户机表的行。类似于 有两种情况:A)搜索参数包含字符串或B)搜索参数为空 在A的情况下,param包含例如一个客户端号'123'。 因此,我使用:,如果客户机在表中,则查询返回客户机123。 在B的情况下,字符串为空。因此我没有使用WHERE子句,查询只是返回表中的所有客户端 我当然可以写一个IF..SELECT查询之外的

  • 我基本上是在根据流量来源对流量进行分组 假设该表包含以下列 现在referrer是不同的-所以即使我按referrer分组-它不会说2,所以这是我使用的查询 这个很管用。但显然我会有不止一个推荐人。所以我想到用大小写语句 这并不像预期的那样起作用。 对于第一个和第二个查询--我已经创建了一个sql fiddle 第一个-http://sqlfiddle.com/#!2/70F6B/2 第二个-ht