mysql内部连接3个表和union
我习惯于使用sparql进行查询,但我必须使用mysql进行查询,因为我不太懂语法。 我有这三张桌子: 产品:mysql内部连接3个表和union,mysql,sql,Mysql,Sql,我习惯于使用sparql进行查询,但我必须使用mysql进行查询,因为我不太懂语法。 我有这三张桌子: 产品: id o 1 p1 2 p2 规格: id o 3 sp1 4 sp2 资料来源: id o 1 s1 3 s1 2 s2 4 s2 正如我们所看到的,产品和规范可以与源不同的ID连接,因此我想我必须进行2个选择,其中源>产品和源>规范之间有2个内部连接,2个选择之间有一个内部连接:
id o
1 p1
2 p2
规格:
id o
3 sp1
4 sp2
资料来源:
id o
1 s1
3 s1
2 s2
4 s2
正如我们所看到的,产品和规范可以与源不同的ID连接,因此我想我必须进行2个选择,其中源>产品和源>规范之间有2个内部连接,2个选择之间有一个内部连接:
SELECT * FROM
(
SELECT pt.o as po, st.id as psID, st.o as pso
FROM source_test st
inner join products_test pt on st.id = pt.id
) x INNER JOIN
(
SELECT st2.o as spo, st1.id as spsID,st1.o as spso
FROM source_test st1
inner join specification_test st2 on st1.id =st2.id
) y
这使得:
po psID pso spo spsID spso
p1 1 s1 sp1 3 s1
p2 2 s2 sp1 3 s1
p1 1 s1 sp2 4 s2
p2 2 s2 sp2 4 s2
现在我需要过滤具有相同源(pso)的产品(po)和规范(spo)(spso)
我希望我能以正确的方式做事,能得到什么样的继续或好的查询:
po spo spso
p1 sp1 s1
p2 sp1 s2
提前感谢。我唯一要做的就是在x.pso=y.spso上过滤y
select p.o, s.o, so.o
from products p
left join specification s
left join source so on p.id=s.id and p.id = so.id;
SELECT * FROM
(
SELECT product.o as po, source.s as psID, source.o as pso FROM source
inner join product
on source.s = product.s
) x INNER JOIN
(
SELECT specification.o as spo, source.s as spsID, source.o as spso FROM source
inner join specification
on source.s = specification.s
) y ON x.pso = y.spso
结果:
po psID pso spo spsID spso
p1 1 s1 sp1 3 s1
p2 2 s2 sp2 4 s2
将x.pso=y.spso上的
添加到查询中:
SELECT x.po, y.spo, y.spso
FROM
(
SELECT products_test.o as po, source_test.id as psID, source_test.o as pso FROM source_test
inner join products_test
on source_test.id = products_test.id
) x INNER JOIN
(
SELECT specification_test.o as spo, source_test.id as spsID,source_test.o as spso
FROM source_test
inner join specification_test on source_test.id =specification_test.id
) y
ON x.pso = y.spso
您可以删除SQL Server标记吗。这是另一种产品。许多SQL Server解决方案无法在MySQL中运行,反之亦然。第一个左连接的子句是否为?这是有效的MySQL语法吗?(大多数其他产品都有语法错误,还有ANSI SQL。)还有pso spso的条件在哪里?@jarlh我可以确认这是有效的mysql语法。实际上,这是我给出的答案。看起来我们同时回答了。干杯