如果存在,则在中选择sql

如果存在,则在中选择sql,sql,if-statement,select,mariadb-10.3,Sql,If Statement,Select,Mariadb 10.3,我正在尝试运行以下命令: IF EXISTS (SELECT id_commande FROM historique WHERE id_commande = 57 AND device = 70635601) BEGIN SELECT id_commande FROM historique WHERE id_commande = 57 AND device = 70635601 END ELSE BEGIN SELECT (MAX(id_commande)+1) FROM his

我正在尝试运行以下命令:

IF EXISTS (SELECT id_commande FROM historique WHERE id_commande = 57 AND device = 70635601)
BEGIN
    SELECT id_commande FROM historique WHERE id_commande = 57 AND device = 70635601
END
ELSE
BEGIN
    SELECT (MAX(id_commande)+1) FROM historique
END
我希望你能理解我想做什么。我的问题是,它总是返回
Erreur dans la requête(1064):第2行的“BEGIN SELECT 1 END ELSE BEGIN SELECT 2 END”附近的语法错误


谢谢你帮助我

我认为您试图使用
案例
语句:

SELECT CASE WHEN EXISTS (SELECT id_commande FROM historique WHERE id_commande = 57 AND device = 70635601) THEN 1 ELSE 2 END;

通过使用
COALESCE()
,您可以在不存在
的情况下执行此操作:


我假设第一个查询只返回一行。

您可以使用值左键连接到子查询。
然后合并该值或最大值

例如:

查询:

|命令| | ----------: | | 57 | 小提琴

SELECT 
  COALESCE(
    (SELECT id_commande FROM historique WHERE id_commande = 57 AND device = 70635601),
    (SELECT MAX(id_commande) + 1 FROM historique)
  )
create table historique 
(
   id int primary key auto_increment,
   device int,
   id_commande int
);

insert into historique 
(device, id_commande) values
(70635601, 57), 
(70635601, 63);
SELECT 
coalesce(
   max(case 
       when val.id_commande = hist.id_commande 
       then hist.id_commande 
       end),
   max(hist.id_commande)+1,
   1
) as id_commande
FROM (
  select 
  70635601 as device,
  57 as id_commande
) val
LEFT JOIN historique hist
ON hist.device = val.device
GROUP BY val.device
| id_commande | | ----------: | | 57 |