使用子查询和固定字符串的SQLite到MariaDB转换CONCAT

问题描述

我需要将一些SQLite查询转换为MariaDB。

我对一个看起来像这样的请求有疑问(并且在SQLite中工作得很好):

SELECT Foo.id,Bar.name ||
       '_' ||
       (SELECT Toto.type
        FROM Toto,Titi
        WHERE Titi.id = 42
         AND Titi.id_Toto = Toto.id
       ) ||
       '/' ||
       Tutu.Name
FROM Foo,Bar,Tutu,Titi
WHERE Titi.id = 42
AND Foo.id_Bar = Bar.id
AND Bar.id_Tutu = Tutu.id
AND Tutu.id_Tutu = Titi.id
     

我将其修改为:

SELECT
    Foo.id,CONCAT( 
        Bar.name,'_',(SELECT Toto.type
         FROM Toto
           INNER JOIN Titi
             ON Titi.id_Toto = Toto.id
         WHERE Titi.id = 42
        ),'/',Tutu.Name
    )
FROM Foo
  INNER JOIN Bar
    ON Foo.id_Bar = Bar.id
  INNER JOIN Tutu
    ON Bar.id_Tutu = Tutu.id
  INNER JOIN Titi
    ON Tutu.id_Tutu = Titi.id
WHERE Titi.id = 42

我尝试使用||也可以进行串联,但是在两种情况下,我最终都会遇到错误

Erreur SQL(1242):子查询返回多于1行

我读到有关GROUP_CONCAT的信息,但是它只需要一个请求,而没有固定的字符串

有什么方法可以使此查询在MariaDB中工作?

解决方法

根据当前设计,似乎不需要关联的子查询,也可以像主查询一样过滤Titi.id = 42并可以与其他表联接,但是所有表之间都可以联接需要

SELECT 
    Foo.id,CONCAT( 
        Bar.name,'_',Toto.type,'/',Tutu.Name
    )
 FROM Foo
 JOIN Bar
   ON Foo.id_Bar = Bar.id
 JOIN Tutu
   ON Bar.id_Tutu = Tutu.id
 JOIN Titi
   ON Tutu.id_Tutu = Titi.id
 JOIN Toto
   ON Titi.id_Toto = Toto.id    
WHERE Titi.id = 42

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...