[英]Combining the results of two seperate SQL queries with 'OR'
框架:Rails 2.3.8數據庫; PostgreSQL的
我目前有以下SQL語句(由Rails生成)
SELECT "outbreaks".* FROM "outbreaks" INNER JOIN "bacterial_agents" ON bacterial_agents.outbreak_id = outbreaks.id INNER JOIN "bacteria" ON "bacteria".id = "bacterial_agents".bacterium_id WHERE (bacteria.name ILIKE E'%VTEC O157%')
SELECT "outbreaks".* FROM "outbreaks" INNER JOIN "viral_agents" ON viral_agents.outbreak_id = outbreaks.id INNER JOIN "virus" ON "virus".id = "viral_agents".virus_id WHERE (virus.name ILIKE E'%NOROVIRUS%')
使用下表(我已經跳過了未使用的屬性,並且布局/鍵的命名取決於Rails約定)
outbreaks
id
bacterial_agents
id
outbreak_id
bacterium_id
bacteria
id
name
viral_agents
id
outbreak_id
virus_id
viruses
id
name
任何想法,我如何將上面兩個帶有“ OR”條件的SQL語句結合起來,以選擇與細菌表相關的爆發記錄,其中細菌.name如“ VTEC O157”,或與病毒表相關的病毒。名稱像“ NOROVIRUS”?
*編輯
關於Rails生成SQL的一些說明-當前輸出以下SQL
SELECT "outbreaks".* FROM "outbreaks" INNER JOIN "bacterial_agents" ON bacterial_agents.outbreak_id = outbreaks.id INNER JOIN "bacteria" ON "bacteria".id = "bacterial_agents".bacterium_id INNER JOIN "viral_agents" ON outbreaks.id = viral_agents.outbreak_id INNER JOIN "viruses" ON "viral_agents".virus_id = "viruses".id WHERE ((bacteria.name ILIKE E'%VTEC O157%') AND (viruses.name ILIKE E'%NOROVIRUS%')) LIMIT 1
本質上,我想將前兩個語句的組合結果輸出為與上述語句類似的格式(用“ OR”條件代替“ AND”)。 但是,如果這不可能,我只需要編寫一個作用域來處理SQL聯合。
想想從下面的答復來看,我將結合兩個單獨的聲明,加油:)
我認為您將SQL聯合運算符與OR混淆,無法將兩個查詢的返回值結合在一起。
OR用於管理語句的WHERE部分中的條件,而union用於將一個查詢附加到另一個查詢。
您應該注意,僅當兩個查詢具有相同的域時,聯合才有效。 通過快速查看您的查詢,它應該完全符合您的想法。
嘗試這個:
SELECT "outbreaks".* FROM "outbreaks" INNER JOIN "bacterial_agents" ON bacterial_agents.outbreak_id = outbreaks.id INNER JOIN "bacteria" ON "bacteria".id = "bacterial_agents".bacterium_id WHERE (bacteria.name ILIKE E'%VTEC O157%')
UNION
SELECT "outbreaks".* FROM "outbreaks" INNER JOIN "viral_agents" ON viral_agents.outbreak_id = outbreaks.id INNER JOIN "virus" ON "virus".id = "viral_agents".virus_id WHERE (virus.name ILIKE E'%NOROVIRUS%')
只需在查詢之間放置一個UNION ALL
SELECT "outbreaks".*
FROM "outbreaks"
INNER JOIN "bacterial_agents" ON bacterial_agents.outbreak_id = outbreaks.id
INNER JOIN "bacteria" ON "bacteria".id = "bacterial_agents".bacterium_id
WHERE (bacteria.name ILIKE E'%VTEC O157%')
UNION ALL
SELECT "outbreaks".*
FROM "outbreaks"
INNER JOIN "viral_agents" ON viral_agents.outbreak_id = outbreaks.id
INNER JOIN "virus" ON "virus".id = "viral_agents".virus_id
WHERE (virus.name ILIKE E'%NOROVIRUS%')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.