我的表格组织如下:
t_user {name, id}
t_keys {id, key}
t_thingsA {key, thing, ...}
t_thingsB {key, thing, ...}
...
我想要做的是针对特定用户名,确定与其id相关联的任何密钥的t_thingsA,t_thingsB等中匹配行数的总和。
我得到的是:
SELECT COUNT(*) FROM t_user INNER JOIN t_keys ON t_user.id=t_keys.id
只是键数。我不确定从哪里开始 - 我知道我可能需要添加一些JOIN组合...
答案 0 :(得分:0)
如果我正确理解了你的问题,我认为你不能在没有子查询或没有连接表的情况下在一个查询中执行它并且由于计算t_thingsA行与t_thingsB的所有行的所有组合而做无用的工作(对于同一个用户)。
如果你只需要为某个特定的user_name计算行数,我建议你用UNION ALL来做,这是(计算上)最快的方法,但肯定不是更优雅的方法:< / p>
SELECT COUNT(*) AS count
FROM t_thingsA
JOIN t_keys ON t_thingsA.key = t_keys.key
JOIN t_user ON t_keys.id = t_user.id
WHERE t_user.user_name = {user_name}
UNION ALL
SELECT COUNT(*) AS count
FROM t_thingsB
JOIN t_keys ON t_thingsB.key = t_keys.key
JOIN t_user ON t_keys.id = t_user.id
WHERE t_user.user_name = {user_name}
结果是你在第一行中有一个表thingA中的条目数,在第二行中有一些表中的条目数.B。
您也可以采用更紧凑的方式,但效率不高 ..所以我只是为了完整性而提及:
SELECT
COUNT(DISTINCT(t_thingsA.key)) AS count_thingsA,
COUNT(DISTINCT(t_thingsB.key)) AS count_thingsB
FROM t_user
JOIN t_keys ON t_user.id = t_keys.id
LEFT JOIN t_thingsA ON t_keys.key = t_thingsB.key
LEFT JOIN t_thingsB ON t_keys.key = t_thingsA.key
WHERE t_user.user_name = {user_name}