我有两张桌子
Table1 with columns
f_id, a_id
Table2 with columns
a_id, a_name
我正在尝试查找一个查询,我可以通过两个子类中f_id
的计数差来订购a_id
s。子查询1基本上类似于:
SELECT f_id,
count(a_id)
FROM Table1
GROUP BY f_id
虽然Subquery 2看起来有点像这样:
SELECT Table1.f_id,
count(Table1.a_id)
FROM Table1, Table2
WHERE
Table1.a_id = Table2.a_id
WHERE Table2.a_name= "User Input1" OR "User Input2"
GROUP BY f_id
现在主要的查询应该按照子序列的数量来计算f_id
的{{1}},我希望你能得到这个想法,即使我可能没有很好地解释它
样本数据和所需的输出:
Table1
现在考虑用户输入是bar,我也希望得到以下输出
Table1 with columns
f_id, a_id
5, 3
5, 4
6, 2
6, 3
Table2 with columns
a_id, a_name
2, "foo"
3, "bar"
4, "too"
答案 0 :(得分:1)
如果我理解正确,这就是你要找的东西:
SELECT t1.f_id, (t1.cnt1 - t2.cnt2) AS DifferenceOfCount
FROM (SELECT f_id, COUNT(a_id) AS cnt1
FROM Table1
GROUP BY f_id) t1
INNER JOIN (SELECT Table1.f_id AS f_id, COUNT(Table1.a_id) AS cnt2
FROM Table1
INNER JOIN Table2
ON Table1.a_id=Table2.a_id
WHERE Table2.a_name= "foo" OR table2.a_name = "bar"
GROUP BY f_id) t2
ON t1.f_id = t2.f_id
ORDER BY DifferenceOfCount
以下是SQL Fiddle,因此您可以看到它是如何工作的。
您应该注意到我使用INNER JOIN语法来连接两个表而不是旧时尚方式(这样做更好的做法......)
此外,如果此查询将采用用户输入,我认为您应该为此创建存储过程...看起来如何看到HERE!
注意:这是MySQL,但类似的东西(可能在Sql Server中也是如此),我不太清楚你使用了什么,因为你标记了它们......
GL!