【问题标题】:SQLite to MariaDB conversion CONCAT with subquery and fixed strings带有子查询和固定字符串的 SQLite 到 MariaDB 转换 CONCAT
【发布时间】:2020-12-05 21:24:26
【问题描述】:

我需要将一些 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

我尝试使用 ||也用于连接,但在这两种情况下我都会遇到错误

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

我读到了 GROUP_CONCAT,但它只需要一个请求,没有固定的字符串

有什么方法可以让这个查询在 MariaDB 中工作?

【问题讨论】:

    标签: sql mariadb subquery


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多