我有一組常量用戶,我想過濾出來並應用於每個查詢以查看他們在應用中正在執行的操作。我一直在探索和探索如何做到這一點,但我仍然不清楚。我是一個SQL語句和JAVA的新手。任何幫助,特別是解釋是非常受歡迎的。在SQL中選擇語句,聯接和重新使用查詢
我一直在試圖弄清楚使用這兩篇文章無濟於事:1 & 2;這些示例顯示瞭如何創建查詢並在另一個查詢中使用它,這正是我想要做的。
有人提到了一個包裹(見參考文獻1)。而這正是我試圖做的事:
當然,包裹在外部查詢你的兩個組操作與選擇,其中包括固定列稱爲來源,即
SELECT 'horrible_query_1' AS Source, * and SELECT 'ugly_query_2' AS Source, *.
這樣,您的
UNION
將爲您提供查詢中的所有列和源標識符。
我的問題:是否有可能將這些查詢重新定位到單獨的查詢中,而無需與變量進行連接?我不明白這是如何工作的(我不確定我是否正確地說)。
這是用戶組和過濾器我想在所有的查詢進行重構:
<select id="get_num_x_users" resultClass="java.lang.Integer">
select count(distinct user_id) from positions sp
join position_definitions sd on sp.position_id = sd.id
where sd.position like '%catcher%'
or lower(sd.position) like '%pitcher%'
or lower(sd.position) like '%dh%';
</select>
重新利用到該查詢(其中少數人):
<select id="get_u_counts" resultClass="java.lang.Integer">
SELECT COUNT(DISTINCT u.id)
FROM searches s
JOIN users u
ON s.user_id = u.id
WHERE search_date > DATE_SUB(curdate(), INTERVAL 3 MONTH)
AND LENGTH(search_term) > 0
AND search_term NOT LIKE ' LIC: SPEC: %'
AND u.type != 'coach';
</select>
我嘗試(不當我在mysql
數據庫中工作時):
with get_x_users as (
select count(distinct user_id) from positions sp
join position_definitions sd on sp.position_id = sd.id
where sd.position like '%catcher%'
or lower(sd.position) like '%pitcher%'
or lower(sd.position) like '%dh%';),
(SELECT COUNT(get_x_users)
FROM searches s
JOIN users u
ON s.user_id = u.id
AND get_x_users
WHERE search_date > DATE_SUB(curdate(), INTERVAL 3 MONTH)
AND LENGTH(search_term) > 0
AND u.type != 'coach');
爲什麼你從位置sp返回一個計數「select count(distinct user_id)...」?你不能加入。您應該返回一個不同的user_id列表「從位置sp選擇不同的user_id」,並將user_id加入到主查詢中的u.id中。 – strattonn
@strattonn你能告訴我你的意思嗎? – thesayhey