SQL:获取一个数据表的计数,并加入其他
问题描述:
我有一个查询,看起来像这样:SQL:获取一个数据表的计数,并加入其他
SELECT COUNT(A.Value1) AS Count, B.id AS Id1, C.id AS Id2
FROM Table1 A LEFT JOIN Table2 B ON (B.Name LIKE '%UserInput1%')
LEFT JOIN Table3 C ON (C.Name LIKE '%UserInput2%')
WHERE A.Value1 LIKE 'CertainValue'
查询运行完美的罚款;这只是COUNT我从Table1
得到的数据不会给我的数量Table1
的实际计数,而是Value1
的数量乘以实际加入的表的数量。
有什么办法,我可以从表1只适合进入A.Value1 LIKE 'CertainValue'
标准得到COUNT,而加入其他表?
FYI:我使用MySQL!
答
的问题是要加入后做计数,所以你在最终的交叉产品计数A.Value1的数量。如果你想从原始表中计数,你应该使用子查询。我不认为这会造成很大的性能问题,它实际上应该改进它,因为它减小了最终连接的大小。
SELECT ACount, B.id AS Id1, C.id AS Id2
FROM (Select COUNT(*) ACount FROM Table1 WHERE Value1 LIKE 'CertainValue') A
LEFT JOIN Table2 B ON (B.Name LIKE '%UserInput1%')
LEFT JOIN Table3 C ON (C.Name LIKE '%UserInput2%')
+0
帮我卸载,谢谢 – 2014-06-17 15:32:19
答
好吧,我想你可以添加DISTINCT
您COUNT
。
SELECT COUNT(DISTINCT A.Value1) AS Count, B.id AS Id1, C.id AS Id2
FROM Table1 A LEFT JOIN Table2 B ON (B.Name LIKE '%UserInput1%')
LEFT JOIN Table3 C ON (C.Name LIKE '%UserInput2%')
WHERE A.Value1 LIKE 'CertainValue'
整个查询真的不是很漂亮,因为您连接的表彼此之间似乎没有任何关系。结果集应该是相当混乱的。
答
书面会返回一个笛卡尔积,因为A,B和C都没有加入所有的查询。另外,count是一个关键字,最好在select中使用另一个标识符。尝试编写查询作为这样的事:
SELECT COUNT(A.Value1) AS MyCount, B.id AS Id1, C.id AS Id2
FROM Table1 A
LEFT JOIN Table2 B ON A.?? = B.??
LEFT JOIN Table3 C ON A.?? = C.??
WHERE A.Value1 LIKE '%CertainValue%'
AND B.Name LIKE '%UserInput1%'
AND C.Name LIKE '%UserInput1%'
GROUP BY B.id, C.id
您的查询目前返回[不确定的结果(http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html)。当有多个匹配时,你希望从其他表中得到什么值?是否故意没有“GROUP BY”? – 2012-08-08 22:36:05
您还需要将各个表彼此关联。 “A”中的行如何与“B”中的行相关? – 2012-08-08 22:44:34
其实我只想从每个表中获取单独的结果(因为这些值或多或少都是唯一的),但我想要从Table1中获得与最终条件相对应的值数的COUNT。 COUNT会是1或0. – matt 2012-08-08 22:58:44