0

我有一个看起来像这样的表:

table name: uno
str_id | title
----------
 "a1"  | "hi"
 "b2"  | "bye"
 "c3"  | "etc."

table name: dos
str_id | other_col_name
-------------------------
   "b2"  |  1
   "b2"  |  5
   "a1"  |  6
   "b2"  |  7

我希望我的查询查看中的值,uno.str_id然后找出在中具有最多值的 str_id 的排序dos.str_id。我想我需要在 str_id 上加入它们,然后按计数排序,但我不确定如何在 SQL 语法中执行此操作。感谢您的时间和帮助。

4

1 回答 1

1
SELECT u.str_id FROM uno u
INNER JOIN dos d ON d.str_id = u.str_id
GROUP BY u.str_id
ORDER BY COUNT(*) DESC;

编辑

可能的 WHERE 部分必须放在 JOIN 部分之后(SQL 语法)。

如果您要查询两个具有“同名”字段的表,并且对这些公共字段执行任何操作,则必须使用别名(或完整的表名)。在该查询中,表 uno 别名为“u”,表 dos 别名为“d”。这意味着,如果你在 uno 和 dos 中有一个字段标题,你必须写 u.title 来查询 uno.title

带别名的版本:

SELECT u.str_id FROM uno u
INNER JOIN dos d ON d.str_id = u.str_id
GROUP BY u.str_id
WHERE u.title = 'bla blabla'
AND d.title IN ('asdf', 'ersg')
ORDER BY COUNT(*) DESC;

没有别名的版本(完整的表名以避免 DBMS 混淆)

SELECT uno.str_id FROM uno 
INNER JOIN dos  ON dos.str_id = unon.str_id
GROUP BY uno.str_id
WHERE uno.title = 'bla bla bla'
AND dos.title IN ('asdf', 'ersg')
ORDER BY COUNT(*) DESC;
于 2012-06-25T22:28:53.040 回答