如何加入不同的表格?
我试着搜索相关的查询语句并应用但不工作。如何加入不同的表格?
我想在一个GET调用中加入我所有的api表,并且我无法执行它。查询失败并获取错误。
我的查询看起来像这样的表我已经显示。
SELECT projects.*, images.*, rewards.*, shipping.*
FROM projects
LEFT JOIN rewards ON rewards.projects_id = projects.id
LEFT INNER JOIN rewards ON rewards.id = shipping.reward_id
LEFT JOIN images ON projects.id = images.project_id
WHERE projects.id = 1
我想加入的奖励和运输与所有的表,项目回报有一个关系到许多和奖励航运也一对多。我怎么能结合在一个查询中的所有这一切?我也尝试子查询,但我不知道如何使这些表中的查询。 请解释一下如何在子查询或联接中工作? 如果不是很好的做法,请说明我的其他技术。
UPDATE
我试图像这样使用子查询它说未知列运送
SELECT projects.*, rewards.*, images.image, shipping = (SELECT *
FROM shipping
WHERE shipping.reward_id IN (SELECT * FROM rewards WHERE rewards.project_id = 1))
FROM projects JOIN rewards ON rewards.project_id = projects.id
LEFT JOIN images ON projects.id = images.project_id
WHERE projects.id = 1
您的查询有几个语法问题。要加入的所有表格中,你可以这样写:
SELECT projects.title, rewards.price, images.images, shipping.shipping
FROM projects
LEFT JOIN images ON images.project_id = projects.id
LEFT JOIN rewards ON rewards.project_id = projects.id
LEFT JOIN shipping ON shipping.rewards_id = rewards.id
WHERE projects.id = 1
,但请注意,如果你有许多图像和许多奖励为同一个项目,这个查询会产生图像和奖励的所有组合,因为您的数据库模式不会定义哪个图像属于哪个奖励。
谢谢,它的工作。那就是示例表和查询。它也适用于我真正的查询。但表格数据重复,因为我有1:m的关系。你能建议我如何过滤?如果不是,我会在PHP中做到这一点。 –
如果您要求获得'null'值而不是重复值,那么是的,您应该在PHP中执行此操作。尽管可以在SQL中完成,但它不是SQL的角色,并且会使查询变得相当复杂,并且输出难以订购。用PHP做。 – trincot
你在哪里找到这个'LEFT INNER JOIN'? 请为你的桌子分享'show create table'并且你想要得到的最终结果 – AnouarZ
如果你要从这四张桌子中选择所有的数据,你将不知道哪个图像与哪个奖励结合在一起,所以结果将会因为每个图像都会与每一个奖励结合在一起。您应该提供样本数据和您想要的样本数据的输出。 – trincot
嗨。请合理地格式化该代码。另请阅读并在[mcve]上采取行动。并阅读关系数据库的介绍 - 你的问题只是要求一个。同样谷歌SO为您的标题/问题的变化的例子。 – philipxy