我有一个看起来像这样的表:
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
中的值,然后找出dos.str_id
中值最大的str_ids的排序。我想我需要在str_id上加入它们然后按计数排序,但我不确定如何在SQL语法中执行此操作。谢谢你的时间和帮助。
答案 0 :(得分: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;
修改强>
必须在JOIN部分之后放置可能的WHERE部分(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;