2017-11-11 91 views
0

我試着搜索相關的查詢語句並應用但不工作。如何加入不同的表格?

我想在一個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 

enter image description here

我想加入的獎勵和運輸與所有的表,項目回報有一個關係到許多和獎勵航運也一對多。我怎麼能結合在一個查詢中的所有這一切?我也嘗試子查詢,但我不知道如何使這些表中的查詢。 請解釋一下如何在子查詢或聯接中工作? 如果不是很好的做法,請說明我的其他技術。

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 
+1

你在哪裏找到這個'LEFT INNER JOIN'? 請爲你的桌子分享'show create table'並且你想要得到的最終結果 – AnouarZ

+1

如果你要從這四張桌子中選擇所有的數據,你將不知道哪個圖像與哪個獎勵結合在一起,所以結果將會因爲每個圖像都會與每一個獎勵結合在一起。您應該提供樣本數據和您想要的樣本數據的輸出。 – trincot

+0

嗨。請合理地格式化該代碼。另請閱讀並在[mcve]上採取行動。並閱讀關係數據庫的介紹 - 你的問題只是要求一個。同樣谷歌SO爲您的標題/問題的變化的例子。 – philipxy

回答

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 

,但請注意,如果你有許多圖像和許多獎勵爲同一個項目,這個查詢會產生圖像和獎勵的所有組合,因爲您的數據庫模式不會定義哪個圖像屬於哪個獎勵。

+0

謝謝,它的工作。那就是示例表和查詢。它也適用於我真正的查詢。但表格數據重複,因爲我有1:m的關係。你能建議我如何過濾?如果不是,我會在PHP中做到這一點。 –

+0

如果您要求獲得'null'值而不是重複值,那麼是的,您應該在PHP中執行此操作。儘管可以在SQL中完成,但它不是SQL的角色,並且會使查詢變得相當複雜,並且輸出難以訂購。用PHP做。 – trincot