如果存在,则在中选择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 |