這是我的當前設置之間搜索至少2個類似的行:
我有2個表,食譜和成分。
菜譜保持ID其他數據。 INGREDIENTS具有所需的每個配方X的行。
怎麼能匹配2個食譜有至少2層相匹配的成分?
我能做到這一點指定哪些成分必須匹配,但我的問題是,當配方有超過10種成分,我需要使用相同的2種成份兩個配方,不知道哪些。
對不起我的英文,不是我的自然語言。如果需要,我會發布更多細節,或者我不夠清楚。
實踐例子:
食譜1有:魚,土豆和鹽。
食譜2有:火雞和大米。
食譜3有:魚,米飯和鹽。
配方4具有:火雞,土豆和鹽。基於配方1
結果應該是:根據配方2應爲4
結果:無
基於配方3 結果應該是:1個
結果基於配方4應該是:1
(是的,我需要根據未在此處說明的過濾器)運行的每一節
SQL:不同的表
SQL:不同的表
回答
嘗試是這樣的:
WITH REC_ING AS (
SELECT *
FROM RECIPE AS T1
INNER JOIN
INGREDIENTS AS T2
ON T1.ID = T2.ID)
SELECT *
FROM (
SELECT T1.ID AS ID1, T2.ID AS ID2
FROM REC_ING AS T1
INNER JOIN
REC_ING AS T2
ON T1.INGREDIENT_ID = T2.INGREDIENT_ID
AND T1.ID != T2.ID) AS JOINED_TAB
GROUP BY ID1, ID2
HAVING COUNT(*) >= 2
這是一個粗略的警察年。如果聽起來像你在找什麼,我可以做一個更詳細的例子(包括SQL小提琴)。
如果您需要將其擴展到超過2種成分,或問題空間和什麼其他的查詢存在的一個更詳細的解釋,看看這個擴展一篇關於RELATIONAL DIVISION。
select DISTINCT A.recipe_id, C.recipe_id other_recipe_id
from INGREDIENTS A
join INGREDIENTS B on A.recipe_id = B.recipe_id and A.ingredient < B.ingredient
join INGREDIENTS C on A.recipe_id < C.recipe_id and C.ingredient = A.ingredient
join INGREDIENTS D on C.recipe_id = D.recipe_id and D.ingredient < B.ingredient
A和B是屬於相同的配方的兩個不同的成分。 使用這些,我們加入到C和D中,它們是相同的兩種成分(A = C,B = D),但是C和D屬於同一配方。
這將返回共享2種成分的食譜的每對的不同ID。您可以通過兩次返回配方表獲取名稱的實際配方名稱。
這很好,但如果我需要3個匹配成分,我必須更改代碼。但我會對它進行一些測試。謝謝 –
幾乎沒有修改這個作品很好(請記住,原來的表與食物無關) –
理查德,我遇到了一個問題,獲得RECIPE上的一個值,你能幫忙嗎? –
- 1. SQL不同表
- 2. 不同表中的SQL 2列不同
- 3. SQL - 從不同的表
- 4. SQL加入不同的表
- 5. SQL連接到不同表
- 6. sql中的SUBQUERY(來自不同的表)
- 7. 3個不同的表查詢的SQL
- 8. Oracle - SQL Plus | Windows |管道 - 不同的結果在不同的表
- 9. 比較SQL中不同類型的不同表中的兩列
- 10. 單SQL檢索來自不同表的不同的信息
- 11. SQL加入在不同的表
- 12. SQL - 從兩個不同的表
- 13. SQL在不同的表上COUNT
- 14. SQL用於連接不同的表
- 15. SQL查詢2頁不同的表
- 16. 如何從不同的表(SQL)
- 17. 不同表格的SQL問題
- 18. 兩個不同表的Sybase SQL聯合
- 19. SQL來自兩個不同的表
- 20. 不同SQL Server的註冊表項
- 21. 不同的值在兩個SQL表
- 22. SQL服務器 - 從不同的表
- 23. SQL加入不同的表結構(MSSQL)
- 24. SQL Server中,從不同的表
- 25. 不同表達式的sql聯盟
- 26. Microsoft Access - SQL表中不同的引用
- 27. SQL外鍵,兩個不同的表
- 28. 多個表中的SQL不同值
- 29. 獲取重複在不同的表SQL
- 30. 具有不同的SQL更新表
我要試試這個,謝謝。 –
嗯......不工作,仍然試圖找出。食譜和配料只是一個例子。真正的桌子與食物無關:D:D:D –
好吧。我會堅持這一個。它更靈活。 –