我有一组常量用户,我想过滤出来并应用于每个查询以查看他们在应用中正在执行的操作。我一直在探索和探索如何做到这一点,但我仍然不清楚。我是一个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