Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果第一个sql select为空,如何运行第二个sql select?_Mysql_Database_Case - Fatal编程技术网

Mysql 如果第一个sql select为空,如何运行第二个sql select?

Mysql 如果第一个sql select为空,如何运行第二个sql select?,mysql,database,case,Mysql,Database,Case,我一直在寻找答案,我发现了关于CASE,IFF和UNION的问题,但我一直没有弄清楚,下面是我一直在尝试的 SELECT * FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id WHERE a.car_id = 619 UNION ALL SELECT * FROM car WHERE car_id = 619 如果第一个select返回空,我想运行第二个selec

我一直在寻找答案,我发现了关于CASE,IFF和UNION的问题,但我一直没有弄清楚,下面是我一直在尝试的

SELECT *
    FROM car_label as a
    INNER JOIN car as b
    ON a.label_id = b.label_id
    WHERE a.car_id = 619
UNION ALL
SELECT *
    FROM car
    WHERE car_id = 619
如果第一个select返回空,我想运行第二个select。第一个部分工作得很好,选择*FROM car_label作为内部连接car as b ON a.label_id=b.label_id其中a.car_id=:car_id,我只是尝试包含第二个选择,以防第一个为空

更新:

Message: 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT * FROM car_label as a INNER JOIN car as' at line 1'
试试这个:

SELECT *
FROM car_label as a
INNER JOIN car as b ON a.label_id = b.label_id
WHERE a.car_id = 619
UNION ALL
SELECT *
FROM car
WHERE car_id = 619
  AND NOT EXISTS (SELECT 1 
                  FROM car_label as a
                  INNER JOIN car as b ON a.label_id = b.label_id
                  WHERE a.car_id = 619)
因此,如果第一个查询返回任何数据,那么notexists将为true,因此第二个查询条件将为true,反之亦然

请注意,为了使此查询正常工作,返回的列应该具有相同的计数和相同的数据类型,因此您可能需要列出列而不是*

但是,我认为您可能需要尝试左连接,因此如果car_标签中没有匹配的车辆,您仍然可以从car表中获取数据:

试试这个:

SELECT *
FROM car_label as a
INNER JOIN car as b ON a.label_id = b.label_id
WHERE a.car_id = 619
UNION ALL
SELECT *
FROM car
WHERE car_id = 619
  AND NOT EXISTS (SELECT 1 
                  FROM car_label as a
                  INNER JOIN car as b ON a.label_id = b.label_id
                  WHERE a.car_id = 619)
因此,如果第一个查询返回任何数据,那么notexists将为true,因此第二个查询条件将为true,反之亦然

请注意,为了使此查询正常工作,返回的列应该具有相同的计数和相同的数据类型,因此您可能需要列出列而不是*

但是,我认为您可能需要尝试左连接,因此如果car_标签中没有匹配的车辆,您仍然可以从car表中获取数据:


我不太确定你的问题。据我所知,如果存在,你可以去

试试下面

MSSQL

MySQL


我不太确定你的问题。据我所知,如果存在,你可以去

试试下面

MSSQL

MySQL


当我在pdo准备中尝试IF时,我收到了一些信息,知道吗?:消息:“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用“IF EXISTSSELECT*FROM car_标签”作为“第1行”的正确语法。您使用的是SQL server还是MySQL?我使用的是MySQL。谢谢,我刚才在读,我会尝试一下。虽然很奇怪,我仍然收到相同的语法错误。这是我在pdo准备中尝试IF时收到的,知道吗?:消息:“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用“IF EXISTSSELECT*FROM car_”标签作为“第1行”的正确语法。您使用的是SQL server还是MySQL?我使用的是MySQL。谢谢,我刚刚阅读了一遍,我会尝试一下。奇怪的是,我仍然收到相同的语法错误。
 IF EXISTS(SELECT * FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id WHERE a.car_id = 619) 
 BEGIN 
        SELECT *
        FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id
        WHERE a.car_id = 619
 END
 ELSE
 BEGIN
        SELECT *
        FROM car
        WHERE car_id = 619
 END
 IF (SELECT * FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id WHERE a.car_id = 619) THEN
 BEGIN 
        SELECT *
        FROM car_label as a INNER JOIN car as b ON a.label_id = b.label_id
        WHERE a.car_id = 619
 END;
 ELSE
 BEGIN
        SELECT *
        FROM car
        WHERE car_id = 619
 END;
 END IF;