考慮運輸行業,哪裏有搬運物料的公司(運輸公司)和運送物料的公司(託運人)。每個人都有基於國家的路線。例如,託運人從緬因州到加利福尼亞州,從緬因州到堪薩斯州,從新罕布什爾州到阿拉巴馬州等發送東西。承運人同樣具有由州到州定義的「路線」。我想使用一個SQL查詢,它可以爲任何發貨起運地/目的地與任何運輸公司之間至少有一個匹配的託運人快速選擇運輸公司。SQL:確定是否一個1:很多在另一個1:很多
數據庫佈局如下:
託運人是一個1:合同米關係。合同與車道的關係爲1:m。通道的最簡單的術語是originState和destinationState。
從這裏我需要查詢所有可能的承運人,看看哪些承運人可能在該合同上出價,這相當於承運人至少有一條支持它的路線與任何一條合同車道相匹配。將載體表與1:m的關係映射到它的所有「路由」,再次定義爲originState和destinationState。
在這一點上,我只需要匹配的運營商列表。我甚至不關心哪條路線匹配,只是他們有資格競標合同。
謝謝!
按照要求,下面是當前查詢:
SELECT DISTINCT
r.id as contractId, c.id as carrierId
FROM
contract r
JOIN
contractLane rl ON rl.contractId = r.id
JOIN
lane l on l.origState = rl.originState and l.destState = rl.destState /*carrier lane matches any contract lane*/
JOIN
carrier c on c.id = l.companyId
JOIN
user u ON u.id = l.masterId and u.type = 4 /* lane owner is a carrier */
WHERE
r.expireDate >= NOW()
AND r.open = '1'
AND r.active = '1'
有一點需要注意的是,託運人可以擁有多個通道,因爲託運人可以使得簡單的JOIN非常密集;以至於查詢在30秒後實際超時。 –
如果您要顯示試圖解決該問題的SQL語句,那將非常有幫助。 –
完成;看到編輯的問題。 –