问题描述
我需要将一些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